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

xml.etree.ElementTree功能介绍

python-23 xml.etree.ElementTree模块

术业有专攻:xml.etree.ElementTree