我的xml文档中有这种节点:
<parent ...>
<a .../>
<b .../>
</parent>
父节点既可以包含a和b,也可以只包含a,只能包含b,或者不包含任何一个。我想写一个XPath来让所有拥有这两者的父母。我能这样做吗?
父母也可以有其他孩子。
答案 0 :(得分:2)
<element>
<a/>
<b/>
</element>
element[child::a][child::b]
这应该选择a和b作为直接子项的所有元素,无论它们是否有其他子项。或者,更简单:
element[a][b]
......我想。
答案 1 :(得分:1)
这样的事情应该这样做: // [a和b]
答案 2 :(得分:1)
//*[child::a and child::b]
答案 3 :(得分:1)
显而易见的:
parent[a and b]
子轴隐含在谓词中,这意味着无需提及它。
parent[child::a and child::b] <!-- the same, only longer -->
只要条件是连续的(“和”),就可以使用两个单独的谓词:
parent[a][b] <!-- the same, slightly shorter -->
这样可以在表达式长度中保存三个字符。但是,使用两个谓词会触发两个单独的检查,因为它们是一个接一个地应用的。使用带有布尔运算符的一个谓词似乎是对我来说最简单,最干净的方法。
答案 4 :(得分:0)
//parent[count(a) > 0 and count(b) > 0]
应该这样做。有一个很棒的XPath测试平台here,在突出匹配节点等方面让生活变得非常简单。