Я читаю XML и добавляю содержимое xml в словарь, но получаю AttributeError: объект 'NoneType' не имеет атрибута 'strip' всякий раз, когда есть пустые теги.
a. xml
<?xml version="1.0"?>
<?xml-stylesheet href="population.xsl" type="text/xsl"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<population>
<human description="male" product_image="male.jpg">
<gender sex="Men">
<id_number>RRX9856</id_number>
<weight></weight>
</gender>
</human>
</population>
Код: всякий раз, когда этот код выполняется, он выдает ошибку упомянутого атрибута, поскольку есть пустые теги, т.е. x.text () - None.
from lxml import etree
from collections import defaultdict
root_1 = etree.parse('a.xml').getroot()
d1 = []
for node in root_1.findall('.//human '):
item = defaultdict(list)
for x in node.iter():
if x.attrib:
item[x.attrib.keys()[0]].append(x.attrib.values()[0])
if x.text.strip():
item[x.tag].append(x.text.strip())
d1.append(dict(item))
d1 = sorted(d1, key = lambda x: x['gender'])
print(d1)
Решение, которое я пробовал:
Я читаю выше XML и заменяю пустое значение между тегами на None, используя приведенный ниже код и сохраняя его в каком-то другом b. xml. Но это двойная работа, когда я читаю исходный файл a. xml, а затем заменяю пустые значения строкой None, а затем сохраняю их в b. xml, а затем читаю новый файл xml.
"%s" % x.text()
Есть ли какое-либо другое решение, которое может справиться с этой ошибкой только в исходном XML, и не возникнет проблем при чтении этого XML, и все элементы, включая пустые значения, также могут быть извлечены в результатах?