使用 xml.etree.ElementTree 在 python 中解析 XML
Posted
技术标签:
【中文标题】使用 xml.etree.ElementTree 在 python 中解析 XML【英文标题】:parsing XML in python by using xml.etree.ElementTree 【发布时间】: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>
【问题讨论】:
【参考方案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-systemsysname').text)
输出
core-usg-01
【讨论】:
【参考方案2】:您需要在根目录上iter()
才能接触到孩子。
for child in root.iter():
print (child.tag, child.attrib)
这将为您提供当前子标签及其属性。
urn:ietf:params:xml:ns:netconf:base:1.0rpc-reply 'message-id': '1'
urn:ietf:params:xml:ns:netconf:base:1.0data
urn:ietf:params:xml:ns:yang:ietf-systemsystem-state
urn:huawei:params:xml:ns:yang:huawei-systemsysname
现在您需要使用以下代码循环到您想要的标签:
for child in root.findall('.//urn:ietf:params:xml:ns:yang:ietf-systemsystem-state'):
temp = child.find('.//urn:huawei:params:xml:ns:yang:huawei-systemsysname')
print(temp.text)
输出将如下所示:
core-usg-01
【讨论】:
以上是关于使用 xml.etree.ElementTree 在 python 中解析 XML的主要内容,如果未能解决你的问题,请参考以下文章
python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别
使用 xml.etree.ElementTree 获取子节点的所有实例
如何使用 python xml.etree.ElementTree 解析 eBay API 响应?