Синтаксический разбор XML с ElementTree - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь проанализировать некоторые данные XML с этого URL: 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)

Я понимаю, что здесь есть какая-то основная проблема, но я безуспешно пытался изменить свой код.Я получаю TypeError следующим образом:

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'

1 Ответ

0 голосов
/ 27 января 2019

Ошибка, которую вы получаете в суммировании sum(counts).Вместо этого вы должны сделать:

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

Поскольку исключение указывает, что вы пытаетесь суммировать найденные узлы типа Element, для которых не определен оператор сложения.Узлы содержат простые целые числа, поэтому преобразование текста узла в int и последующее суммирование - это то, что вам нужно сделать.

Если у вас есть плавающие числа в ваших узлах, вы должны использовать конструктор float.

...