使用xml.etree.elementtree解析XML数据,然后求和

时间:2016-01-09 17:35:07

标签: python xml

我正在尝试获取提供的示例数据,计算所有出现的' count',然后在这些位置添加整数。

示例xml数据:http://python-data.dr-chuck.net/comments_42.xml

到目前为止我的代码:

import urllib
import xml.etree.ElementTree as ET

url = 'http://python-data.dr-chuck.net/comments_42.xml'
print 'Retrieving', url

site = urllib.urlopen(url)
data = site.read()
print 'Retrieved',len(data),'characters'
print data
tree = ET.fromstring(data)


results = tree.findall('count')
print results

total = results.sum
print total

当我跑步时,我得到: 打印xml示例Web数据,然后打印一个空的[]

我想要的输出类似于

检索到4204个字符 数:50 总和:2482

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

首先 - 你需要为你正在寻找的元素使用正确的xpath:

results = tree.findall('comments/comment/count')

这会产生:

[<Element 'count' at 0x10b42ca10>, <Element 'count' at 0x10b42cad0>, ...]

如您所见,它们是Element个实例。其次,您必须从这些实例中检索标记内容并将值转换为整数:

counts = [int(r.text) for r in results]

然后您可以将所有计数加总为单值:

count = sum(counts)

答案 1 :(得分:0)

来自documentation

  

Element.findall()仅查找带有标记的元素,这些元素是当前元素的直接子元素。

这些count元素不是根元素的直接子元素。

您需要执行类似

的操作
for i in tree.iter('count'):
    print i.text

如果您想要所有count的总和:

sum([int(i.text) for i in tree.iter('count')])  # returns 2482