获取特定层次结构级别的元素

时间:2010-07-04 12:21:18

标签: xpath

有没有办法使用XPath检索特定层次结构级别的所有元素?

UPD。

<A>
   <B>1</B>
   <B>2</B>
</A>
<C>
   <D>3</D>
   <D>4</D>
</C>

我需要检索所有B和D元素(层次结构级别= 2)

1 个答案:

答案 0 :(得分:9)

你的例子缺少一个根元素,所以我假设这样:

<ROOT>
  <A>
    <B>1</B>
    <B>2</B>
  </A>
  <C>
    <D>3</D>
    <D>4</D>
  </C>
</ROOT>

有了这个,一个简单的版本就是使用适当数量的'any element'通配符来获得结果:

xpath = '/*/*/*'

(意思是“选择任何根元素的任何子元素的任何子元素”)

或者,如果您想以数字方式表达级别,可以使用:

xpath = '//*[count(ancestor::*) = 2]'

(意思是“选择任何具有2个祖先的元素”)


编辑/注意:正如Dimitre Novatchev正确指出的那样,区分节点元素非常重要,我修复了我的答案因此。 (虽然元素本身就是节点,there are also six other types of nodes!)

通过将基于祖先的xpath略微改为:

,可以用给定的例子来说明差异。
xpath = '//*[count(ancestor::node())=2]'

这将选择A和B ,因为根元素将被视为一个祖先节点,而根节点'/'将被视为另一个!