【问题标题】:How to get sibling tag values in XML using python ElementTree如何使用 python ElementTree 在 XML 中获取兄弟标签值
【发布时间】:2020-03-24 10:48:39
【问题描述】:

我一直在尝试获取ci-name 元素的值,其兄弟RandomAttribute 的值(文本)很重要。我是 python 的初学者,我正在尝试使用 Python 的内置 ElementTree。

这是示例 XML:

<state>
    <s-name>State 1</s-name>
    <district>
        <d-name>District 1</d-name>
        <city>
            <ci-name>City 1</ci-name>
            <RandomAttribute>UN- IMPORTANT</RandomAttribute>
        </city>
        <city>
            <ci-name>City 2</ci-name>
            <RandomAttribute>NOT SO IMPORTANT</RandomAttribute>
        </city>
        <city>
            <ci-name>City 3</ci-name>
            <RandomAttribute>IMPORTANT</RandomAttribute>
        </city>
    </district>
</state>

请帮帮我。

【问题讨论】:

  • 可以使用lxml吗?
  • @Jack Fleeting Yes

标签: python python-3.x python-2.7 xml-parsing elementtree


【解决方案1】:
import lxml.etree as etree

如果你正在使用的 xml 是字符串,那么

xml_xpath = "/state/district/city[RandomAttribute='IMPORTANT']/ci-name/text()"
XML_dom = etree.XML(xml)
XML_XPATH_name = etree.XPath(xml_xpath)
return XML_XPATH_name(XML_dom)

【讨论】:

    【解决方案2】:

    不像上一个那样在一行中提供解决方案,但我喜欢跟踪 XML 的结构。

    也许这有助于您了解 ElementTree 的工作原理?

    import xml.etree.ElementTree as ET
    
    xml = 'temp.xml'
    xmltree = ET.parse(xml)
    cities = xmltree.findall('district')[0].findall('city')
    for city in cities:
        RandAttribute = city.findall('RandomAttribute')[0].text
        if RandAttribute == "IMPORTANT":
            ci_name = city.findall('ci-name')[0].text
            print(ci_name)
    

    【讨论】:

      【解决方案3】:

      您可以使用 XPath-1.0 表达式访问该值

      /state/district/city[RandomAttribute='IMPORTANT']/ci-name
      

      只需将其放入 Python XML 处理器中即可。
      lxml 中,这可能看起来像

      xml = ...
      tree = etree.parse(xml)
      result = tree.xpath('/state/district/city[RandomAttribute='IMPORTANT']/ci-name')
      print(result[0].tag)
      

      输出应该是

      城市 3

      【讨论】:

        猜你喜欢
        • 2023-02-09
        • 2019-08-29
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2020-04-28
        • 2011-09-17
        • 1970-01-01
        相关资源
        最近更新 更多