如何只获取包含xpath文本的特定类型的最底层节点?

时间:2012-03-25 01:21:31

标签: xml xpath

假设我有以下xml:

<one>
  <two> 
    <three>
      <three>
        foo
      </three>
      <four />
      <three>
        bar
        <four />
      </three>
    </three>
  </two>
</one>

我可以编写哪些XPath查询只返回这些节点:

<three>
  foo
</three>

<three>
  bar
  <four />
</three>

但不是这一个:

<three>
  <three>
    foo
  </three>
  <four />
  <three>
    bar
    <four />
  </three>
</three>

我试过这个:

//three/descendant-or-self::*/text()/ancestor::three

但它返回了我不想要的那个。我也不能假设这是xml的确切结构,所以我不认为..运算符会起作用。基本上,我想要three类型的文本节点中最年轻的祖先。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为//three[text() and not (descendant::three)]会做你想做的事。