繁体   English   中英

Python3 xml 用 ElementTree 解析和信息提取

[英]Python3 xml parsing and information extracting with ElementTree

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

<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 更好的解析器? 也许这里有一位专家可以帮助...

提前感谢(一百万)

xml2dict 可以在这里提供帮助

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'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM