如何解决如何使用 Python elementTree 提取 xml 数据中的特定元素
我正在尝试从大型 XML 输出中提取一些数据,有人能帮我提取 99 个百分位数的 TotalMilliseconds
。
我正在尝试使用 ElementTree
解析器在 Python 中执行此操作。
我目前正在尝试做这样的事情,找到第 99 个百分位数,然后尝试从该级别的根中找到 TotalMilliseconds
。
但这没有返回任何内容,在调试中我可以看到它进入了 99 子句,但我对从那里开始的方向有点迷茫。
for item in root.findall('./TimeSpan/Latency/Bucket/Percentile'):
if item.text == "99":
totalMs = item.find('TotalMilliseconds').text
print(totalMs)
<TimeSpan>
<Latency>
<Bucket>
<Percentile>96</Percentile>
<ReadMilliseconds>55.378</ReadMilliseconds>
<WriteMilliseconds>105.115</WriteMilliseconds>
<TotalMilliseconds>98.546</TotalMilliseconds>
</Bucket>
<Bucket>
<Percentile>97</Percentile>
<ReadMilliseconds>59.552</ReadMilliseconds>
<WriteMilliseconds>109.733</WriteMilliseconds>
<TotalMilliseconds>104.649</TotalMilliseconds>
</Bucket>
<Bucket>
<Percentile>98</Percentile>
<ReadMilliseconds>64.891</ReadMilliseconds>
<WriteMilliseconds>116.998</WriteMilliseconds>
<TotalMilliseconds>111.300</TotalMilliseconds>
</Bucket>
<Bucket>
<Percentile>99</Percentile>
<ReadMilliseconds>81.629</ReadMilliseconds>
<WriteMilliseconds>131.931</WriteMilliseconds>
<TotalMilliseconds>125.176</TotalMilliseconds>
</Bucket>
</Latency>
</TimeSpan>
解决方法
见下文
import xml.etree.ElementTree as ET
data = """<?xml version="1.0" encoding="UTF-8"?>
<TimeSpan>
<Latency>
<Bucket>
<Percentile>96</Percentile>
<ReadMilliseconds>55.378</ReadMilliseconds>
<WriteMilliseconds>105.115</WriteMilliseconds>
<TotalMilliseconds>98.546</TotalMilliseconds>
</Bucket>
<Bucket>
<Percentile>97</Percentile>
<ReadMilliseconds>59.552</ReadMilliseconds>
<WriteMilliseconds>109.733</WriteMilliseconds>
<TotalMilliseconds>104.649</TotalMilliseconds>
</Bucket>
<Bucket>
<Percentile>98</Percentile>
<ReadMilliseconds>64.891</ReadMilliseconds>
<WriteMilliseconds>116.998</WriteMilliseconds>
<TotalMilliseconds>111.300</TotalMilliseconds>
</Bucket>
<Bucket>
<Percentile>99</Percentile>
<ReadMilliseconds>81.629</ReadMilliseconds>
<WriteMilliseconds>131.931</WriteMilliseconds>
<TotalMilliseconds>125.176</TotalMilliseconds>
</Bucket>
</Latency>
</TimeSpan>"""
root = ET.fromstring(data)
# data is a list to support the case of many 99 Percentile
data = [e.find('TotalMilliseconds').text for e in root.findall('.//Bucket') if e.find('Percentile').text == '99']
print(data)
输出
['125.176']
,
不是搜索和迭代 Percentile
元素,而是迭代 Bucket
元素。然后,对于每个 Bucket
,找到并比较它的 Percentile
,然后像您已经做的那样继续:
import xml.etree.ElementTree as ET
xml = """
YOUR XML
"""
tree = ET.fromstring(xml)
for item in tree.findall(".//Bucket"):
if item.find("Percentile").text == "99":
totalMs = item.find("TotalMilliseconds").text
print(totalMs)
输出:
125.176
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。