用于查找当前元素和子元素的 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
使用表达式 .//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