有没有办法使用XPath检索特定层次结构级别的所有元素?
UPD。
<A>
<B>1</B>
<B>2</B>
</A>
<C>
<D>3</D>
<D>4</D>
</C>
我需要检索所有B和D元素(层次结构级别= 2)
答案 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 ,因为根元素将被视为一个祖先节点,而根节点'/'将被视为另一个!