首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xml.etree.ElementTree解析python中的XML

使用xml.etree.ElementTree解析python中的XML
EN

Stack Overflow用户
提问于 2021-12-15 06:29:11
回答 2查看 1.2K关注 0票数 0

我使用请求模块获得一个XML文件,然后我想使用xml.etree.ElementTree模块来获得元素核心USG-01的输出,但我已经搞不清楚该如何做了,我卡住了。我试着编写这个简单的代码来获得sysname元素,但是我得到了一个空的输出。Python代码:

代码语言:javascript
复制
import xml.etree.ElementTree as ET

tree = ET.parse('usg.xml')
root = tree.getroot()
print(root.findall('sysname'))

XML文件:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2021-12-15 06:57:54

您需要在根目录上使用iter()才能到达子节点。

代码语言:javascript
复制
for child in root.iter():
   print (child.tag, child.attrib)

它会给你当前的子标签和它们的属性。

代码语言:javascript
复制
{urn:ietf:params:xml:ns:netconf:base:1.0}rpc-reply {'message-id': '1'}
{urn:ietf:params:xml:ns:netconf:base:1.0}data {}
{urn:ietf:params:xml:ns:yang:ietf-system}system-state {}
{urn:huawei:params:xml:ns:yang:huawei-system}sysname {}

现在,您需要使用以下代码循环到所需的标记:

代码语言:javascript
复制
for child in root.findall('.//{urn:ietf:params:xml:ns:yang:ietf-system}system-state'):
    temp = child.find('.//{urn:huawei:params:xml:ns:yang:huawei-system}sysname')
    print(temp.text)

输出将如下所示:

代码语言:javascript
复制
core-usg-01
票数 1
EN

Stack Overflow用户

发布于 2021-12-15 09:01:53

试试下面的一个衬垫

代码语言:javascript
复制
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-system}sysname').text)

输出

代码语言:javascript
复制
core-usg-01
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70359267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档