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

如何从XML文件中提取指定属性的所有属性值

问题场景

给定如下结构的XML赛段数据文件,需要提取所有<Lap>标签中twrr属性对应的取值,示例XML片段如下:

<LapRankIncludingDiscos>1</LapRankIncludingDiscos>
<Lap num="1" p="1" et="40.3468" s1="24.2085" s2="20.8324" s3="29.3612" fuel="0.969" twfl="0.996" twfr="0.996" twrl="0.996" twrr="0.996" fcompound="0,Michelin" rcompound="0,Michelin">74.4021</Lap>
<Lap num="2" p="1" et="114.7489" s1="19.2400" s2="20.9481" s3="29.2010" fuel="0.945" twfl="0.992" twfr="0.992" twrl="0.992" twrr="0.992" fcompound="0,Michelin" rcompound="0,Michelin">69.3891</Lap>
<Lap num="3" p="1" et="184.1380" s1="19.1381" s2="20.8024" s3="29.2390" fuel="0.918" twfl="0.988" twfr="0.992" twrl="0.988" twrr="0.988" fcompound="0,Michelin" rcompound="0,Michelin">69.1795</Lap>
<Lap num="4" p="1" et="253.3175" s1="19.2191" s2="20.6913" s3="29.1175" fuel="0.894" twfl="0.984" twfr="0.988" twrl="0.984" twrr="0.984" fcompound="0,Michelin" rcompound="0,Michelin">69.0280</Lap>
<Lap num="5" p="1" et="322.3455" s1="19.0733" s2="20.6675" s3="29.1936" fuel="0.867" twfl="0.976" twfr="0.984" twrl="0.980" twrr="0.980" fcompound="0,Michelin" rcompound="0,Michelin">68.9343</Lap>
<Lap num="6" p="1" et="391.2798" s1="19.1766" s2="20.8935" s3="29.4496" fuel="0.843" twfl="0.973" twfr="0.980" twrl="0.976" twrr="0.976" fcompound="0,Michelin" rcompound="0,Michelin">69.5196</Lap>
可行实现方案

方案1:Python 标准库解析(优先推荐,无第三方依赖)

用Python自带的XML解析库处理,不会因为XML格式微调出错,稳定性最高:

import xml.etree.ElementTree as ET

# 把括号里的路径替换成你自己的XML文件实际路径
xml_tree = ET.parse("lap_data.xml")
root = xml_tree.getroot()

twrr_result = []
# 遍历所有Lap节点,提取twrr属性
for lap_node in root.iter("Lap"):
    twrr_val = lap_node.get("twrr")
    if twrr_val:
        # 需要字符串类型就直接存,需要数值就转float
        twrr_result.append(float(twrr_val))

print(twrr_result)

针对示例数据的运行输出:

[0.996, 0.992, 0.988, 0.984, 0.98, 0.976]

方案2:命令行一键提取(适合快速处理文件)

如果是Linux/macOS环境,安装xmlstarlet工具后,单条命令即可输出所有结果:

xmlstarlet sel -t -v "//Lap/@twrr" -n lap_data.xml

执行后会逐行打印所有twrr属性值。

方案3:正则临时匹配(仅推荐格式固定的一次性场景)

如果只是临时处理、不想引入解析逻辑,且XML格式和示例完全一致,可以用正则直接匹配取值。注意如果XML出现属性顺序调整、引号类型变化、标签嵌套变动,该方案会失效:

import re

with open("lap_data.xml", "r", encoding="utf-8") as f:
    file_content = f.read()

# 匹配twrr="xxx"格式里引号包裹的数值
twrr_result = re.findall(r'twrr="([\d.]+)"', file_content)
# 转数值类型
twrr_result = [float(v) for v in twrr_result]
print(twrr_result)

注意:生产场景、长期使用的脚本不要用正则处理XML,优先选正规XML解析方案,避免格式变动导致匹配异常。


内容的提问来源于stack exchange,提问作者Mika Hakimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:57:19