XPath可以只返回具有X子节点的节点吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XPath可以只返回具有X子节点的节点吗?相关的知识,希望对你有一定的参考价值。
是否可以使用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>
以上是关于XPath可以只返回具有X子节点的节点吗?的主要内容,如果未能解决你的问题,请参考以下文章