Разбор XML с ElementTree с ошибкой самозакрывающегося тега - PullRequest
1 голос
/ 07 мая 2019

У меня есть какой-то xml, который я анализирую с ElementTree, и я не верю, что структура / содержимое, кроме строки, предоставленной мною, уместна, поэтому я ее опустил.

Я анализирую это как: Rwy.find('Special').text

И когда строка XML:вместо этого:

<Special/>

Это выдает ошибку: TypeError: must be str, not NoneType, которая заставляет меня поверить, что есть некоторая разница из-за самозакрывающегося тега вместо предыдущего примера с закрывающим тегом.

Как правильно разобрать элемент с самозакрывающимся тегом?

1 Ответ

2 голосов
/ 07 мая 2019

Пробел имеет значение в XML.

Сравнить:

>>> from xml.etree import ElementTree as et
>>> s = '<test><Special>   </Special></test>'
>>> tree = et.fromstring(s)
>>> tree.find('Special')
<Element 'Special' at 0x000001A7E9B154F8>
>>> tree.find('Special').text
'   '

против

>>> s = '<test><Special/></test>'
>>> tree = et.fromstring(s)
>>> tree.find('Special')
<Element 'Special' at 0x000001A7E9B1F638>
>>> tree.find('Special').text
>>>

Первый возвращается str. Второй возвращает None. В закрывающем теге нет содержимого .text.

Проверьте возвращаемое значение .text, прежде чем использовать его.

...