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 组合框中,但它们相互依赖。因此,当用户在第一个组合框中选择“研发”时,相应的部分(在我的示例中为“原型设计”,但实际上还有更多)应该在第二个组合框中可见并可选择。根据用户在第二个组合框中选择的部分,第三个组合框中的相应条目应该出现等等。每个房间都有不同的机器。
我拼命尝试使用 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'])
我必须解析一个 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 组合框中,但它们相互依赖。因此,当用户在第一个组合框中选择“研发”时,相应的部分(在我的示例中为“原型设计”,但实际上还有更多)应该在第二个组合框中可见并可选择。根据用户在第二个组合框中选择的部分,第三个组合框中的相应条目应该出现等等。每个房间都有不同的机器。
我拼命尝试使用 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'])