如何用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)
代码说明
- XML解析:用
ET.fromstring()处理字符串XML,本地文件则用ET.parse()加载后获取根节点。 - 节点定位:
root.findall('.//assignmnt')会递归查找XML中所有层级的assignmnt节点,无需关心其嵌套结构。 - 属性提取:对每个
assignmnt节点,通过find()定位子节点side_a和side_b,再用get()方法获取指定属性值。 - 结果组装:按需求顺序将属性值打包成元组,添加到结果列表中,最终得到长度为3的目标列表。
内容的提问来源于stack exchange,提问作者hugo1111
相关产品推荐
相关产品推荐

