XPath - 每个第二级元素的第一个元素

时间:2013-10-10 11:52:43

标签: xpath

以此为例:

<root>
  <gramps name="Bill">
    <him name="Bill Jr">
      <kid name="Bill III"/>
    </him>
  </gramps>
  <gramps name="Tom">
    <him name="Al">
      <kid name="Al Jr"/>
    </him>
  </gramps>
  <gramps name="Bob">
    <him name="Bob Jr">
      <kid name="Sam"/>
    </him>
  </gramps>
  <store name="Tom's"/>
  <store name="Bill's"/>
  <store name="Pete's"/>
</root>

我可以通过以下方式获得所有二级元素:

/*/*

我可以使用:

获取所有二级元素gramps store的名称
distinct-values(/*/*/name())

如何才能获得每个第二级元素的第一个元素:

  <gramps name="Bill">
    <him name="Bill Jr">
      <kid name="Bill III"/>
    </him>
  <store name="Tom's"/>

1 个答案:

答案 0 :(得分:4)

如果之前有相同名称,您可以检查每个名称:

/*/*[not(preceding-sibling::*/name() = name())]

或者,可能更快,找到每个名字的第一个:

for $name in distinct-values(/*/*/name()) return /*/*[name() = $name][1]