使用python提取xml中的文本值

2024-06-01 07:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用ElementTree尝试从XML中提取一些值。在

这是一个xml:-在

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE playerstats>
<playerstats>
<steamID>76561197960964581</steamID>
<gameName>Team Fortress 2</gameName>
<stats>
    <stat>
        <name>Scout.accum.iNumberOfKills</name>
        <value>1777</value>
    </stat>
    <stat>
        <name>Scout.accum.iPlayTime</name>
        <value>247469</value>
    </stat>
    <stat>
        <name>Scout.accum.iPointCaptures</name>
        <value>641</value>
    </stat>
    <stat>
        <name>Soldier.accum.iNumberOfKills</name>
        <value>1270</value>
    </stat>
    <stat>
        <name>Soldier.accum.iPlayTime</name>
        <value>94649</value>
    </stat>
    <stat>
        <name>Spy.accum.iNumberOfKills</name>
        <value>7489</value>
    </stat>
    <stat>
        <name>Spy.accum.iPlayTime</name>
        <value>1110582</value>
    </stat>
</stats>
</playerstats>

还有很多,但这只是一个样本。在

我想提取和求和与“*”相关的所有值。累计播放时间,计算总播放时间。星号表示所有职业(如童子军、士兵等)。在

到目前为止我的代码(包括我的一些尝试):-

^{pr2}$

我的想法是从每个类中获取值,然后求和。虽然我觉得可能有一个方法可以在一次犯规中使用*作为TF2类名的所有值,但我打算在第一次解决如何从包含我所需值的标记后面的标记中获取值之后执行此操作。在

希望这有道理。在

谢谢。在


Tags: namevaluestats时间xmlstatscoutspy
2条回答

这应该行得通

totalTime = 0
root = ET.fromstring(statsTF2)
for stat in root.findall("./stats/stat"):
    if stat.find('name').text.endswith('accum.iPlayTime'):
        totalTime+=int(stat.find('value').text)


totalTime
>>> 1452700

使用^{}属性:

root = ET.fromstring(statsTF2)
for stat in root.findall("./stats/stat"):
    if stat.find('name').text.endswith('.accum.iPlayTime'):
        print stat.find('value').text

给定的问题(打印在xml中):

^{pr2}$

^{}与XPath一起使用:

import lxml.etree as ET

root = ET.fromstring(statsTF2)
for text in root.xpath('./stats/stat[name[contains(text(), ".accum.iPlayTime")]]/value/text()'):
    print text

相关问题 更多 >