问题描述
通过表达式.//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