问题描述
通过表达式.//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库中使用了它,但这没有什么区别。
1楼
您要在此处使用descendant-or-self
轴:
descendant-or-self::b
或者,您可以执行此操作,编写起来稍短...
self::b|.//b