【问题标题】:XML extracting parsing with ElementTree使用 ElementTree 进行 XML 提取解析
【发布时间】:2019-06-20 18:49:20
【问题描述】:

我正在尝试从该 url 解析一些 XML 数据:http://py4e-data.dr-chuck.net/comments_42.xml,返回 Count 值并对提取的值求和。

import urllib as ur
import xml.etree.ElementTree as ET

url = input(('Enter location: '))
print'Retrieving:', url

data = ur.urlopen(url).read()
tree = ET.fromstring(data)
counts = tree.findall('.//count')

print('Count: ', sum(counts))
#print('Sum: ', sum_all)

我知道这里存在一些基本问题,但我一直在尝试修改我的代码但没有成功。我收到如下类型错误:

Enter location: 'http://py4e-data.dr-chuck.net/comments_42.xml'
Retrieving: http://py4e-data.dr-chuck.net/comments_42.xml
Traceback (most recent call last):
  File "extracting_xml.py", line 11, in <module>
    print('Count: ', sum(counts))
TypeError: unsupported operand type(s) for +: 'int' and 'Element'

【问题讨论】:

  • 请提供MCVE。特别是:您尝试解析的 XML 文档的摘录以及您遇到的错误。

标签: python xml python-3.x elementtree


【解决方案1】:

您得到的错误是求和sum(counts)。相反,您应该这样做:

sum([int(el.text) for el in counts])

由于异常表明您正在尝试总结未定义加法运算符的Element 类型的已找到节点。节点包含纯整数,因此您需要将节点的文本转换为int,然后求和。

如果您的节点中有浮点数,那么您将使用 float 构造函数。

【讨论】:

  • 完美,谢谢!只是为了确保我理解,这个修正是 1. 将元素转换为整数 2. 对于计数中的元素?
  • text 类型的对象的值 Element 转换为 int。在这个list comprehension 中它是变量el
  • @Jon:如果我的回答解决了您的问题,请标记(答案左侧的灰色勾号)。
  • 请考虑accepting this answer。另请参阅stackoverflow.com/help/someone-answers 了解更多信息。
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2017-08-31
相关资源
最近更新 更多