【问题标题】:parsing XML in python by using xml.etree.ElementTree使用 xml.etree.ElementTree 在 python 中解析 XML
【发布时间】:2022-01-18 09:04:30
【问题描述】:

我使用 request 模块得到一个 XML 文件,然后我想使用 xml.etree.ElementTree 模块来获取元素的输出 核心-usg-01 但我已经很困惑怎么做,我卡住了。我尝试编写这个简单的代码来获取 sysname 元素,但我得到一个空输出。 Python代码:

import xml.etree.ElementTree as ET

tree = ET.parse('usg.xml')
root = tree.getroot()
print(root.findall('sysname'))

XML 文件:

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1">
    <data>
        <system-state xmlns="urn:ietf:params:xml:ns:yang:ietf-system">
            <sysname xmlns="urn:huawei:params:xml:ns:yang:huawei-system">
                core-usg-01
            </sysname>
        </system-state>
    </data>
</rpc-reply>

【问题讨论】:

    标签: python xml xml.etree


    【解决方案1】:

    试试下面的一种衬里

    import xml.etree.ElementTree as ET
    
    
    xml = '''<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1">
        <data>
            <system-state xmlns="urn:ietf:params:xml:ns:yang:ietf-system">
                <sysname xmlns="urn:huawei:params:xml:ns:yang:huawei-system">
                    core-usg-01
                </sysname>
            </system-state>
        </data>
    </rpc-reply>'''
    
    root = ET.fromstring(xml)
    print(root.find('.//{urn:huawei:params:xml:ns:yang:huawei-system}sysname').text)
    

    输出

    core-usg-01
    

    【讨论】:

      【解决方案2】:

      您需要在根目录上iter() 才能接触到孩子。

      for child in root.iter():
         print (child.tag, child.attrib)
      

      这将为您提供当前子标签及其属性。

      {urn:ietf:params:xml:ns:netconf:base:1.0}rpc-reply {'message-id': '1'}
      {urn:ietf:params:xml:ns:netconf:base:1.0}data {}
      {urn:ietf:params:xml:ns:yang:ietf-system}system-state {}
      {urn:huawei:params:xml:ns:yang:huawei-system}sysname {}
      

      现在您需要使用以下代码循环到您想要的标签:

      for child in root.findall('.//{urn:ietf:params:xml:ns:yang:ietf-system}system-state'):
          temp = child.find('.//{urn:huawei:params:xml:ns:yang:huawei-system}sysname')
          print(temp.text)
      

      输出将如下所示:

      core-usg-01
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        相关资源
        最近更新 更多