XPath表达式,用于查找当前元素以及子元素

时间:2018-09-17 13:16:56

标签: python xml xslt xpath lxml

使用表达式.//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 个答案:

答案 0 :(得分:3)

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

descendant-or-self::b

或者,您可以执行此操作,这样写起来稍短...

self::b|.//b