Python ElementTree:如何根据属性值选择嵌套XML元素?
解决ElementTree路径查找错误并获取目标元素属性
错误原因
你使用的//*[@title='President']是绝对XPath路径,而调用root.findall()时,路径需要是相对于当前节点(root)的相对路径,直接使用绝对路径会触发SyntaxError。
修正方案
将路径改为相对路径写法,在开头加上.,表示从当前节点开始递归查找所有后代元素。之后通过元素的attrib属性获取所有属性数据,或直接访问单个属性。
完整修正代码
from xml.etree import ElementTree as ET xml = '''<?xml version="1.0" encoding="UTF-8"?> <Report> <h1> <h2> <Element name='Bob' age='32' title='President'></Element> <Element name='Sue' age='25' title='Vice-President'></Element> <Element name='Mary' age='44' title='Secretary'></Element> </h2> </h1> </Report>''' root = ET.fromstring(xml) # 用相对路径查找所有title为President的元素 target_elements = root.findall(".//*[@title='President']") # 若找到目标元素,获取其属性数据 if target_elements: # 获取所有属性的字典 president_attrs = target_elements[0].attrib print("所有属性:", president_attrs) # 单独获取某个属性,比如name或age print("姓名:", president_attrs['name']) print("年龄:", president_attrs['age'])
更精确的路径写法
如果明确知道目标元素的标签名是Element,可以把路径写得更精准,提升查找效率:
target_elements = root.findall(".//Element[@title='President']")
内容的提问来源于stack exchange,提问作者GrizzlyMcGee
相关产品推荐
相关产品推荐

