それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ノードからXpathを取り出す。

以前RubyでノードからXpathを取り出してみた

takuya-1st.hatenablog.jp

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日

追記して、誤字を修正した。