有没有办法使用XPath检索特定层次结构级别的所有元素?
UPD.
<A>
<B>1</B>
<B>2</B>
</A>
<C>
<D>3</D>
<D>4</D>
</C>
Run Code Online (Sandbox Code Playgroud)
我需要检索所有B和D元素(层次结构级别= 2)
你的例子缺少一个根元素,所以我假设这样的事情:
<ROOT>
<A>
<B>1</B>
<B>2</B>
</A>
<C>
<D>3</D>
<D>4</D>
</C>
</ROOT>
Run Code Online (Sandbox Code Playgroud)
有了这个,一个简单的版本就是使用适当数量的"任何元素"通配符来获得结果:
xpath = '/*/*/*'
Run Code Online (Sandbox Code Playgroud)
(含义'选择任何根元素的任何子元素的任何子元素')
或者,如果要以数字方式表示级别,可以使用:
xpath = '//*[count(ancestor::*) = 2]'
Run Code Online (Sandbox Code Playgroud)
(意思是'选择任意元素有2个祖先')
编辑/注意:正如Dimitre Novatchev正确指出的那样,区分节点和元素很重要,我相应地修正了我的答案.(虽然元素本身就是节点,但还有其他六种类型的节点!)
通过将基于祖先的xpath稍微改为:给定示例,可以说明不同之处:
xpath = '//*[count(ancestor::node())=2]'
Run Code Online (Sandbox Code Playgroud)
这将选择A和B,因为根元素将被视为一个祖先节点,根节点'/'将被视为另一个!