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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:06:18