python - XML ElementTree:两个同名标签
问题描述
我正在寻找包含值(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)
此代码返回所有值。
解决方案
尝试更具体地了解address
您想要的标签,即使用:
s=elem.find(‘.//native:primary/native:address’,namespaces)
推荐阅读
- python - 熊猫数据框未正确创建
- mongodb - 如何从猫鼬中的引用模型中获取字段?
- java - 比较并获取值后,我的应用程序被强制关闭
- java - 如何使用 3 个更改值循环此语句以设置 40 个文本字段的 setText?
- reactjs - Index.html 不会在嵌套 url 上加载 css 或脚本
- jquery - bootstrap-4 模态中的双滚动条
- javascript - 为什么我无法在电子中全局使用路径、fs 导入
- c++ - Visual Studio 2015 - 预构建事件以确定要编译的项目
- reactjs - 在 React Native 中检测活动屏幕
- c# - C++ 等价于 C# OOP if(Boy b is Student)