如何用xml.etree.ElementTree解析指定XML并提取属性值
解决嵌套- 元素的XML解析无输出问题
核心问题排查与解决方案
返回码0但无输出,大概率是没正确遍历到所有
1. 递归遍历所有嵌套-
使用ElementTree.findall('.//item')语法,可递归查找XML中所有层级的
2. 正确提取属性(含可选属性)
用元素的get()方法处理可选属性(如red),指定默认值避免KeyError;必填属性直接通过attrib字典获取即可。
完整示例代码
假设你的XML结构如下:
<root> <item neighbor-name="Alice" pos="(10,20)" size="small" type="user"> <item neighbor-name="Bob" pos="(30,40)" size="large" type="admin" red="true"/> <item neighbor-name="Charlie" pos="(50,60)" size="medium" type="guest"/> </item> </root>
解析代码:
import xml.etree.ElementTree as ET # 加载XML(从文件加载则用ET.parse('your_file.xml').getroot()) xml_content = '''上面的XML字符串''' root = ET.fromstring(xml_content) # 遍历所有嵌套的item元素 for item in root.findall('.//item'): # 提取必填属性 neighbor_name = item.attrib.get('neighbor-name') pos = item.attrib.get('pos') size = item.attrib.get('size') item_type = item.attrib.get('type') # 避免与内置type关键字冲突 # 提取可选属性,默认值设为None red = item.attrib.get('red', None) # 按指定格式输出(示例用字典打印,可按需调整格式) print({ 'neighbor-name': neighbor_name, 'pos': pos, 'size': size, 'type': item_type, 'red': red })
常见坑点排查
- 属性名拼写错误:XML属性名大小写敏感,需完全匹配(比如别把
neighbor-name写成neighbor_name)。 - XML加载失败:从文件加载时,检查路径是否正确、文件是否存在或编码是否异常。
- 遍历范围错误:
root.find('item')仅能找到根节点下的第一个直接子元素,无法获取嵌套的子item,必须用.//item。 - 输出语句遗漏:确认代码包含
print()或其他输出逻辑,别只提取属性却不输出。
内容的提问来源于stack exchange,提问作者Krispy
相关产品推荐
相关产品推荐

