首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ElementTree的Python3 xml解析与信息抽取

基于ElementTree的Python3 xml解析与信息抽取
EN

Stack Overflow用户
提问于 2020-08-14 00:54:58
回答 1查看 33关注 0票数 0

我必须解析一个XML文件,其中包含一个我必须重写的软件的设置。不幸的是,我对XML解析非常不熟悉,到目前为止,我找到的所有教程都只介绍了非常简单的用例。该XML文件的结构如下:

代码语言:javascript
复制
<department name="R&D">
    <section name="Prototyping">
        <room name="A.2.25">
            <machine name="Yamaha YSM" serial="123456"/>
            <machine name="Yamaha YSM" serial="123556"/>
            <machine name="Yamaha YSM" serial="654321"/>
            <machine name="Omron X-Ray" serial="X235-566"/>
        </room>
    </section>
</department>

真正的列表要长得多,包含更多的机器、房间和分区。现在的问题是:我必须将所有这些属性放入不同的PyQt5组合框中,但它们彼此依赖。因此,当用户在第一个组合框中选择"R&D“时,适当的部分(在我的示例中是”原型“,但实际上还有更多)应该在第二个组合框中可见和可选。根据用户在第二个组合框中选择的部分,第三个组合框中应该出现相应的条目,等等。每个房间都有不同的机器。

我拼命地想用ElementTree来解决这个问题,但是我真的被卡住了。我已经试了两天了,还是找不到解决方案。也许有比ElementTree更好的解析器?也许这里有个专家可以帮你..。

提前感谢(一百万)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 01:26:53

xml2dict可以在这里提供帮助

代码语言:javascript
复制
import pprint
import xmltodict

xml = '''<r><department name="RnD">
    <section name="Prototyping">
        <room name="A.2.25">
            <machine name="Yamaha YSM" serial="123456"/>
            <machine name="Yamaha YSM" serial="123556"/>
            <machine name="Yamaha YSM" serial="654321"/>
            <machine name="Omron X-Ray" serial="X235-566"/>
        </room>
    </section>
    <department name="Oper">
    <section name="SectionName">
        <room name="A.2.25">
            <machine name="Yamaha YSM" serial="123456"/>
            <machine name="Yamaha YSM" serial="123556"/>
            <machine name="Yamaha YSM" serial="654321"/>
            <machine name="Omron X-Ray" serial="X235-566"/>
        </room>
        <room name="A.2.251">
            <machine name="Yamaha YSM" serial="123456"/>
            <machine name="Yamaha YSM" serial="123556"/>
            <machine name="Yamaha YSM" serial="654321"/>
            <machine name="Omron X-Ray" serial="X235-566"/>
        </room>
    </section>
</department>
</department></r>'''
data = xmltodict.parse(xml)
pprint.pprint(data)
print(data['r']['department']['@name'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63399834

复制
相关文章

相似问题

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