XPathを使用して、特定の子要素を持つノードのみを選択することは可能ですか?たとえば、このXMLでは、「bar」の子を持つペットの要素のみが必要です。したがって、結果のデータセットには、この例のlizard
およびpig
要素が含まれます。
<pets>
<cat>
<foo>don't care about this</foo>
</cat>
<dog>
<foo>not this one either</foo>
</dog>
<lizard>
<bar>lizard should be returned, because it has a child of bar</bar>
</lizard>
<pig>
<bar>return pig, too</bar>
</pig>
</pets>
このXpathはすべてのペット"/pets/*"
を提供しますが、'bar'
という名前の子ノードを持つペットのみが必要です。
ここに、すべての栄光があります
/pets/*[bar]
英語:pets
の子を持つすべての子bar
をくれ
/pets/child::*[child::bar]
申し訳ありませんが、以前の返信に対するコメントはありませんでした。
ただし、この場合はdescendant::
軸。指定されたものから下のすべての要素を含みます。
/pets[descendant::bar]
子についてより具体的にしたい場合に備えて、子でセレクターを使用することもできます。
例:
<pets>
<cat>
<foo>don't care about this</foo>
</cat>
<dog>
<foo>not this one either</foo>
</dog>
<lizard>
<bar att="baz">lizard should be returned, because it has a child of bar</bar>
</lizard>
<pig>
<bar>don't return pig - it has no att=bar </bar>
</pig>
</pets>
今度は、すべてのpets
に子が含まれるbar
属性att
に値baz
のみを気にします。次のxpath式を使用できます。
//pets/*[descendant::bar[@att='baz']]
結果
<lizard>
<bar att="baz">lizard should be returned, because it has a child of bar</bar>
</lizard>