如果Child元素存在,如何在Xpath中获取父元素的属性值?

时间:2016-11-25 20:09:26

标签: xml xpath

我是XPath的新手,如果存在特定的子元素,则不确定如何获取父元素的属性值。

<planet name="Earth" star="Sun">
      <primary>
            <oxygen>20.95%</oxygen>
            <water>70.8%</water>
      </primary>
</planet>

如果@name元素存在于主要内容中,那么我的XPath应该从元素<planet>获取<oxygen>属性?

2 个答案:

答案 0 :(得分:2)

您可以使用谓词向下看树。这将选择具有planet个子元素的所有primary/oxygen元素。我添加了一个根元素,假设它隐藏在某个文档中。

import lxml.etree

doc = lxml.etree.fromstring("""<root>
<planet name="Earth" star="Sun">
      <primary>
            <oxygen>20.95%</oxygen>
            <water>70.8%</water>
      </primary>
</planet>
</root>""")

print(doc.xpath('planet[primary/oxygen]/@name'))

答案 1 :(得分:-1)

正确答案取决于您当前XPath axis。因此,如果当前轴为<oxygen>,则访问元素@name的{​​{1}}属性的XPath表达式将为:

<planet>

或封装在XSLT表达式中:

../../@name