Я использую пакет l xml для чтения тегов и значений атрибутов из XML. Он считывает значения, когда открывающие и закрывающие теги находятся в одной строке, но не читает, когда открывающие и закрывающие теги находятся в разных строках. Ниже XML ценники, например, <price>
и </price>
, в одной строке и цена, поступающая в выводе
a. xml
<catalog>
<product description="Cardigan Sweater" product_image="cardigan.jpg">
<catalog_item gender="Men's">
<cool_number>QWZ5671</cool_number>
<price></price>
</catalog_item>
</product>
</catalog>
Вывод:
[{'gender': ["Men's"], 'cool_number': ['QWZ5671'], 'price': ['None']}]
Но если ценники и в другой строке, то цена в выводе не появляется
a. xml
<catalog>
<product description="Cardigan Sweater" product_image="cardigan.jpg">
<catalog_item gender="Men's">
<cool_number>QWZ5671</cool_number>
<price>
</price>
</catalog_item>
</product>
</catalog>
Вывод:
[{'gender': ["Men's"], 'cool_number': ['QWZ5671']}]
Код одинаковый для обоих xmls:
from lxml import etree
from collections import defaultdict
root_1 = etree.parse('a.xml').getroot()
d1= []
for node in root_1.findall('.//catalog_item'):
item = defaultdict(list)
for x in node.iter():
# iterate over the items
for k, v in x.attrib.items():
item[k].append(v)
if x.attrib is None:
item[x.attrib].append('None')
if x.text is None:
item[x.tag].append('None')
elif x.text.strip():
item[x.tag].append(x.text.strip())
d1.append(dict(item))
print(d1)
Есть идеи, когда теги и в другой строке, тогда почему ценник не выводится? как это исправить?