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

Sib*_*Guy 2 xpath

有没有办法使用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)

Hen*_*pel 9

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

<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,因为根元素将被视为一个祖先节点,根节点'/'将被视为另一个!

  • 虽然这个答案是正确的,但也有一些术语问题.在XPath中,"节点"通常与"元素"不同.特别是,由XPath表达式`/`选择的`根节点`是*不是*元素.此外,除了元素子元素之外,元素还可以具有类型的子元素:文本节点,注释和处理指令.请更正你的答案中的语句,参考"节点"来引用"元素". (3认同)