python - 如何使用子元素遍历子元素
问题描述
我需要在默认字典中输入 XML 文件的元素。使用第一个子元素作为我的键,其他 2 个值将在列表中。
我试图将元素保留在单独的列表中,然后将它们配对,但仍然没有成功。
下面是 XML 结构
<lines>
<line>
<lineName>'Line 1'</lineName>
<lineCode>'5501'</lineCode>
<machineName>'Line_1'</machineName>
</line>
<line>
<lineName>'Line 2'</lineName>
<lineCode>'5502'</lineCode>
<machineName>'Line_2'</machineName>
</line>
</lines>
这是我检索元素的方式
item = myxmlcfg.getElementsByTagName('lineName')
item 是一个包含 2 个元素的列表
item['Line 1', 'Line 2']
lineCode 和 machineName 元素也会发生同样的情况
所以我需要一个默认字典,输出如下
lines {'Line 1': ['5501', 'Line_1'], 'Line 2':['5502', 'Line_2']}
其中Key
是lineName
标签,值是一个包含 2 个元素的列表,其值为lineCode
和machineName
。
你能建议我一种方法来迭代 xml 元素以获得上述输出吗?任何帮助将不胜感激。谢谢
解决方案
我没有任何经验minidom
,但这ElementTree
是一项微不足道的任务:
from xml.etree import ElementTree as ET
from xml.etree.ElementTree import ElementTree
if __name__ == '__main__':
xml_raw = '''
<lines>
<line>
<lineName>'Line 1'</lineName>
<lineCode>'5501'</lineCode>
<machineName>'Line_1'</machineName>
</line>
<line>
<lineName>'Line 2'</lineName>
<lineCode>'5502'</lineCode>
<machineName>'Line_2'</machineName>
</line>
</lines>
'''
root: ElementTree = ET.fromstring(xml_raw)
lines = {}
for line in root.findall('line'):
name = line.findtext('lineName').strip("'")
code = line.findtext('lineCode').strip("'")
machine = line.findtext('machineName').strip("'")
lines[name] = [code, machine]
print(lines)
输出:
{'Line 1': ['5501', 'Line_1'], 'Line 2': ['5502', 'Line_2']}
推荐阅读
- angular - Kendo Grid Angular自定义按一个字段排序
- r - 在 tidyverse 中使用正则表达式进行过滤 - 不清楚为什么这不起作用
- python - 测试大整数的快速方法
- javascript - 如何让 html 文件从 config.js 文件中读取值
- java - 通过多对多关系将 Enum 分组到不同条件的有效设计
- javascript - 探测
- c - 您是否特别需要 malloc 为链表的新元素分配内存
- python - Flask:蓝图未显示自定义错误页面
- javascript - 找不到模块“newman”需要堆栈:
- node.js - 使用 Node.js 和 Mongoose 哪些步骤可以保存引用第一个文档和第二个文档?