You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python ElementTree提取XML属性为指定格式的元组列表

使用Python ElementTree提取XML中的assignments为元组列表

现有如下XML内容:

<basic name="myAssignments" type="INTEL">
       <sirius dataType="UINT">
             <assignmnt>
                    <side_a value="a0" desc="sirius_desc_a0"/>
                    <side_b value="b0" desc="sirius_desc_b0"/>
             </assignmnt>
             <assignmnt>
                    <side_a value="a1" desc="sirius_desc_a1"/>
                    <side_b value="b1" desc="sirius_desc_b1"/>
             </assignmnt>
             <assignmnt>
                    <side_a value="a2" desc="sirius_desc_a2"/>
                    <side_b value="b2" desc="sirius_desc_b2"/>
             </assignmnt>
       </sirius>
</basic>

需要将所有assignmnt节点提取为元组列表,格式如下:

[
    ("a0", "sirius_desc_a0", "b0", "sirius_desc_b0"),
    ("a1", "sirius_desc_a1", "b1", "sirius_desc_b1"),
    ("a2", "sirius_desc_a2", "b2", "sirius_desc_b2")
]

目前仅能提取单个元素属性,不知如何实现上述需求。


实现代码

import xml.etree.ElementTree as ET

# 解析XML(如果是本地文件,替换为ET.parse("your_file.xml").getroot())
xml_content = '''
<basic name="myAssignments" type="INTEL">
       <sirius dataType="UINT">
             <assignmnt>
                    <side_a value="a0" desc="sirius_desc_a0"/>
                    <side_b value="b0" desc="sirius_desc_b0"/>
             </assignmnt>
             <assignmnt>
                    <side_a value="a1" desc="sirius_desc_a1"/>
                    <side_b value="b1" desc="sirius_desc_b1"/>
             </assignmnt>
             <assignmnt>
                    <side_a value="a2" desc="sirius_desc_a2"/>
                    <side_b value="b2" desc="sirius_desc_b2"/>
             </assignmnt>
       </sirius>
</basic>
'''
root = ET.fromstring(xml_content)

assignments = []
# 遍历所有assignmnt节点
for assignmnt in root.findall('.//assignmnt'):
    # 提取side_a的属性
    side_a = assignmnt.find('side_a')
    a_val = side_a.get('value')
    a_desc = side_a.get('desc')
    # 提取side_b的属性
    side_b = assignmnt.find('side_b')
    b_val = side_b.get('value')
    b_desc = side_b.get('desc')
    # 组装元组并加入列表
    assignments.append((a_val, a_desc, b_val, b_desc))

print(assignments)

代码说明

  1. XML解析:用ET.fromstring()处理字符串XML,本地文件则用ET.parse()加载后获取根节点。
  2. 节点定位:root.findall('.//assignmnt')会递归查找XML中所有层级的assignmnt节点,无需关心其嵌套结构。
  3. 属性提取:对每个assignmnt节点,通过find()定位子节点side_a和side_b,再用get()方法获取指定属性值。
  4. 结果组装:按需求顺序将属性值打包成元组,添加到结果列表中,最终得到长度为3的目标列表。

内容的提问来源于stack exchange,提问作者hugo1111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:25:24