XPath选择标签由id而不是后代

时间:2010-05-18 12:28:26

标签: xpath

我有以下代码,我必须选择id =“text”的所有节点,而不是已经拥有id =“text”的父节点:

<fo:block id="text">
  test00
  <fo:block id="text">
      test01
  </fo:block>
  <fo:block>
      test02
  </fo:block>
</fo:block>
<fo:block id="text">
    test03
</fo:block>

所以在这个例子中,查询必须只返回带有内容test00和test03的两个fo:block。

谢谢。

1 个答案:

答案 0 :(得分:2)

我会选择这样的事情:

//fo:block[@id='text' and not(./*[@id='text'])]

我现在要给它一个测试,以确保它是理智的。是啊。它根据需要返回text00和text03。所以请允许我解释这个表达。

//fo:block             # Select all fo:block elements in the document
[
  @id='text' and       # Get only those whose id attribute's value is "text"
  not(./*[@id='text']) # and whose children do not have id attributes equal to "text"
]