それマグで!

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

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

XPATHについて。XMLのXpathで条件にマッチしたノードを取り出す。

XPATHってパスですよね。パスにヒットするノードを配列で取り出すみたいな

あるテキストを含むノードを取り出す。

検索データを含むXMLノードを探して、取り出すには、PHPの場合はこんな感じ

<?php
$simple_xml->xpath("/data/row/name/id[text()='{$categoryID}']/parent::*");

php でサンプル書いたけど,XPATHはlibxml提供なのでどの言語でも同じですよね。

パスだけだとノード取れすぎ。

"/data/row/name"

で取り出すと、大量に取れちゃう。name 中の id = 1 のノードだけに絞り込んで取りたい。
取得した name 数万件のリストを for ループで廻して・・・探して取り出す。とか悪夢。

<name><id>1</id></name>

id テキストに1のモノだけ取り出したい。/name/id だと取れ過ぎちゃうし,/name/id/text()=1 だと id が取れちゃう。 id = 1の name ノードが欲しい。

"/data/row/name/id[text()='1']"

コレだと、 id ノードが返って来ちゃう。

parent キーワードを使うことにした。

"/data/row/name/id[text()='1']/parent::*"

これで id = 1 のノードの親ノードが返ってくるので一発で取れる。


XPATHはたぶんもっと良い方法が有ると思うんだけど、思いつかない。XPATH奥が深い。