用于查找当前元素和子元素的 XPath 表达式

XPath expression for finding the current element as well as children

使用表达式 .//b 我可以找到所有元素 低于 带有标签 b 的当前元素。如果当前元素也有一个 b 标记,则不会找到它。我如何表达我想找到当前标签 的所有子元素以及 当前元素本身,以防它与给定的标签名称匹配?

这是一些示例输入 xml:

<a>
  <b>
    <i>
      <u>one</u>
    </i>
    <b>two</b>
  </b>
  <b>three</b>
  <em>four</em>
</a>

如果第一个元素 <b> 是当前元素,我想获取所有子元素(即包含 two 的元素)和元素本身,而不是包含 [=16 的元素=](搜索标签时 b)。搜索标签 u 时,我只想获取包含 one.

的标签

我试过 .[name()='b']|.//b 但这显然是一个无效的表达式。

我也尝试了 ..//b 但后来我不仅得到了元素本身和包含 two 的元素,还得到了包含 three.

的元素

是否可以用一个 XPath 表达式来获得我想要的东西?

旁注:我在 Python 的 lxml/etree 库中使用它,但这应该没什么区别。

您想在此处使用 descendant-or-self 轴:

descendant-or-self::b

或者,您可以这样做,这样写起来稍微短一些...

self::b|.//b