【问题标题】:XML ElementTree: two tags with the same nameXML ElementTree:两个同名标签
【发布时间】:2021-05-24 21:10:51
【问题描述】:

我正在寻找包含值(IP 地址)的第二个标签 但循环返回第一个标签。

xml:

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:52622325-b136-40cf-bc36-85332e25b6f3"
    xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
    <data>
        <native
            xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
            <interface>
                <GigabitEthernet>
                    <name>1</name>
                    <ip>
                        <address>
                            <primary>
                                <address>192.168.40.30</address>
                                <mask>255.255.255.0</mask>
                            </primary>
                        </address>
                    </ip>
                    <logging>
                        <event>
                            <link-status/>
                        </event>
                    </logging>
                    <mop>
                        <enabled>false</enabled>
                        <sysid>false</sysid>
                    </mop>
                    <negotiation
                        xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-ethernet">
                        <auto>true</auto>
                    </negotiation>
                </GigabitEthernet>
            </interface>
        </native>
    </data>
</rpc-reply>

Python 代码:此代码从第一个地址标签中不返回任何内容。

import xml.etree.ElementTree as ET

tree = ET.parse("C:\\Users\\Redha\\Documents\\test_network\\interface1234.xml")
root = tree.getroot()   
namespaces = {'native': 'http://cisco.com/ns/yang/Cisco-IOS-XE-native'  }
for elem in root.findall('.//native:ip', namespaces): 
        s = elem.find('.//native:address',namespaces)
        s1 = elem.find('.//native:name',namespaces)
        s2 = elem.find('.//native:mask',namespaces)
        ip_address = s.text
        interface = elem.tag
        number = s1.text
        mask = s2.text
        print(interface,ip_address,number,mask)

此代码返回所有值。

【问题讨论】:

  • 尝试更具体地了解您想要的地址标签,即使用s=elem.find(‘.//native:primary/native:address’,namespaces)
  • 您可以编辑您的问题并添加 exact 预期输出吗?不是描述,而是print(interface,ip_address,number,mask) 的确切预期输出或您感兴趣的任何内容。
  • @barny 辛苦了,谢谢

标签: python xml elementtree


【解决方案1】:

尝试更具体地确定您想要哪个 address 标签,即使用:

s=elem.find(‘.//native:primary/native:address’,namespaces)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 2017-08-23
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多