xPathするときにあるキーワードが部分一致する任意の要素を取得する方法

これもけっこうはまったので備忘録。

xPathを使ってXMLデータをフィルタリングする際、部分一致をするときにはcontainsを使うんだけど、その方法。

item要素が複数あり、その子要素のBASIC、さらにその子要素のhogeの値が’fuga’であるitem要素だけをフィルタリングしたいときの、記述方法がこちら。

$products = $xml->xpath("/rss/channel//item[contains(BASIC/hoge,'fuga')]");

ポイントは、取得したい一番上の要素(この場合item)の前のスラッシュを2つにすることと、そのあとにcontainsを書いて条件が含まれる孫要素までの記載をすること(この場合は、BASIC/hoge)。

こうすることで、指定したキーワードが含まれる要素を取得することが可能です。