xml.etree.ElementTree 简介
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml.etree.ElementTree 简介相关的知识,希望对你有一定的参考价值。
参考技术A xml.etree.ElementTree 是一个用于处理树结构的 Python 包。它可以用于处理任何树结构的数据,但最常用于处理 XML 文档。
参考文档: http://effbot.org/zone/element.htm
Element类代表了树节点,每个树节点包含以下成员(properties):
创建树节点时,一定要指定节点名:
也可在创建时指定属性(Element.attrib):
创建节点后,可以设置 text , tail 等类成员。这些成员的初始值为 None 。
可以用 Element.append() 成员函数添加子节点:
Element类用私有成员 Element._children 存放子节点,该私有成员是一个 list 变量。
为了方便访问子节点,Element封装了下标索引函数,使用时可以把 Element 想象成一个 list
变量:
使用 xml.etree.ElementTree 包中的 tostring() 和 fromstring() 函数:
如果 tostring() 参数不指定 encoding="unicode" ,函数将返回 byte 序列。
再举一个生成 html 的例子:
添加子节点可以用 SubElement 构造函数快速实现:
使用 xml.etree.ElementTree 在 python 中解析 XML
【中文标题】使用 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 简介的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 xml.etree.ElementTree 编写 XML 声明
python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别
使用 xml.etree.ElementTree 在 python 中解析 XML