ElementTree如何获取NAME以%%PEP-开头的VARIABLE节点的VALUE值
问题原因
你之前的代码无法生效有三个核心问题:
find()方法仅返回第一个匹配的节点,要批量获取所有符合条件的节点必须使用findall()- Python标准库
xml.etree.ElementTree支持的XPath为精简子集,不支持starts-with()这类前缀匹配函数,你写的[@NAME='']是精确匹配NAME属性为空的节点,和你的筛选目标完全不符 try是Python语法保留字,不能作为循环变量名使用
实现方案
方案1:标准库兼容写法(推荐)
不需要额外安装依赖,遍历所有VARIABLE节点后手动判断前缀即可,兼容性最好:
# 遍历当前JOB节点下所有VARIABLE子节点 for var in j_nodeOS.findall("./VARIABLE"): name = var.get("NAME", "") if name.startswith("%%PEP-"): value = var.get("VALUE") # 后续按需处理获取到的键值对即可,示例: print(f"{name} -> {value}")
方案2:完整XPath写法(需第三方库)
如果习惯直接用XPath做筛选,可以安装第三方解析库lxml,它支持完整XPath语法,可直接写前缀匹配规则:
# lxml的元素对象支持starts-with类XPath函数 for var in j_nodeOS.findall("./VARIABLE[starts-with(@NAME, '%%PEP-')]"): print(var.get("NAME"), var.get("VALUE"))
注意:不要在标准库ElementTree中使用
starts-with()写法,会直接抛出XPath语法错误。
内容的提问来源于stack exchange,提问作者defekas17
相关产品推荐
相关产品推荐

