使用表达式.//b
,我可以找到所有带有标签b
的元素之下。如果当前元素也具有b
标签,将找不到该元素。如何表达我想找到当前标签以及当前元素本身的所有子元素,以防其与给定的标签名称匹配?
这是一些示例输入xml:
<a>
<b>
<i>
<u>one</u>
</i>
<b>two</b>
</b>
<b>three</b>
<em>four</em>
</a>
如果第一个元素<b>
是当前元素,我想获取所有子元素(即包含two
的元素)和元素本身,而不是包含three
的元素(当搜索标签b
时)。在搜索标签u
时,我只想获取包含one
的标签。
我已经尝试过.[name()='b']|.//b
,但这显然是无效的表达式。
我也尝试了..//b
,但是我不仅获得了元素本身以及包含two
的元素,而且还获得了包含three
的元素。
是否可以使用一个XPath表达式来获得我想要的?
侧面说明:我在Python的lxml / etree库中使用了它,但这应该没有区别。
答案 0 :(得分:3)
您要在此处使用descendant-or-self
轴:
descendant-or-self::b
或者,您可以执行此操作,这样写起来稍短...
self::b|.//b