使用python提取xml中的文本值

使用python提取xml中的文本值,python,xml,elementtree,Python,Xml,Elementtree,我使用ElementTree尝试从XML中提取一些值 以下是xml的一个示例:- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE playerstats> <playerstats> <steamID>76561197960964581</steamID> <gameName>Team Fortress 2</gameName> <stats>

我使用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>
我的想法是从每门课中获取价值,然后将其相加。虽然我推测,使用*作为TF2类名可能有一种方法可以一次性获得所有值,但在我第一次研究如何从包含所需值的标记后面的标记中获取值之后,我打算这样做

希望这是有意义的

谢谢。

使用属性:

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):


与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
使用属性:

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):


与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
这应该行得通

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
这应该行得通

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

感谢您的回答以及如何累积这些值。感谢您的回答以及如何累积这些值。