XML ElementTree:两个标签同名

XML ElementTree: two tags with the same name

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

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代码:此代码return与第一个地址标签无关。

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)

此代码 return 所有值。

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

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