如何写一个XPath来让所有有两个已知孩子的父母?

时间:2009-07-08 18:28:47

标签: xpath

我的xml文档中有这种节点:

<parent ...>
   <a .../>
   <b .../>
</parent>

父节点既可以包含a和b,也可以只包含a,只能包含b,或者不包含任何一个。我想写一个XPath来让所有拥有这两者的父母。我能这样做吗?

父母也可以有其他孩子。

5 个答案:

答案 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,在突出匹配节点等方面让生活变得非常简单。