以前RubyでノードからXpathを取り出してみた
php でも同じようなことが出来る。
<?php $xml = file_get_contents("http://takuya-1st.hatenablog.jp/rss"); $dom = new DOMDocument(); $dom->loadXML($xml); $xpath = new DOMXPath($dom); $ret =$xpath->query('//title'); foreach( $ret as $e){ echo $e->getNodePath()." : " .$e->nodeValue."\n"; } echo "END\n";
HTMLの場合は、loadHTMLを使うほうが良い。
loadHTMLの場合
XMLとしてエラーが出るような場合はHTMLとして解釈するほうが無難だと思う。 loadHTML()
を使う。
ただし、文字コードでハマるので、ちょっとしたその場しのぎの修正が必要。
<?php $html = file_get_contents("http://takuya-1st.hatenablog.jp/rss"); $dom = new DOMDocument(); $dom->loadHTML('<?xml encoding="UTF-8">'.$html); $xpath = new DOMXPath($dom); $ret =$xpath->query('//title'); foreach( $ret as $e){ echo $e->getNodePath()." : " .$e->nodeValue."\n"; } echo "END\n";
実行結果
takuya@~/Desktop$ php test.php /rss/channel/title : それマグで! /rss/channel/item[1]/title : Bashでカラフルにするエスケープシーケンスを色々 /rss/channel/item[2]/title : mysql のデータベースコピー(dump/restore) /rss/channel/item[3]/title : Raspberry Pi のHDMIでTVの電源On/Off /rss/channel/item[4]/title : curl-kでSSLエラー回避 /rss/channel/item[5]/title : github flavour markdown を変換する。 /rss/channel/item[6]/title : markdown でスライドするにはremark が楽だった。 /rss/channel/item[7]/title : slim でオブジェクトメソッドをrouteに登録する /rss/channel/item[8]/title : etckeeper を導入しても、静かにしてもらう。 /rss/channel/item[9]/title : etckeeper で確認する方法 /rss/channel/item[10]/title : mintty を CMD.exeの代わりに使う。 /rss/channel/item[11]/title : ruby のwdm でWindowsのファイル監視。 /rss/channel/item[12]/title : aprops でmanpageの記述から検索 /rss/channel/item[13]/title : whatis : man -k の代わりになる便利コマンド /rss/channel/item[14]/title : Slim framewrork はpathinfoの解釈が変なので対応する /rss/channel/item[15]/title : dotfileだけをls で一覧する方法 /rss/channel/item[16]/title : XMLに検索インデックスを貼って便利に使えるPostgreSQL /rss/channel/item[17]/title : 駅探の駅情報の印刷に最適な感じに綺麗にする。 /rss/channel/item[18]/title : DOMで要素の先頭に追加する /rss/channel/item[19]/title : vim で追加カット・追加コピー /rss/channel/item[20]/title : PostgresのインストールとPAM設定 /rss/channel/item[21]/title : vim の最新版をパパっとインスト /rss/channel/item[22]/title : 壊れたシンボリックリンクをまとめて消す /rss/channel/item[23]/title : grep で特定のディレクトリを外す /rss/channel/item[24]/title : ruby の md5と md5sum コマンドの結果が同じならないと思ったら。。。 /rss/channel/item[25]/title : linuxで別のユーザーとしてコマンドを実行して、カンタンにpsqlコマンドを実行する /rss/channel/item[26]/title : manpageをvim でひらく /rss/channel/item[27]/title : CakePHP 3.0.5を入れてパパっとAdminページを作りたい /rss/channel/item[28]/title : どのmanをのファイルを見てるかハッキリさせる /rss/channel/item[29]/title : dhcping でdhcp サーバーを探す /rss/channel/item[30]/title : digコマンド結果はshortオプションを使うと便利 END
javascriptでどうやるんだろう
本題は、Javascriptでやりたかったんだけどなぁ。
2020年4月3日
追記して、誤字を修正した。