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)
我正在寻找第二个包含值(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)