Как преобразовать XML в CSV, когда атрибуты находятся внутри корневого тега? - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно преобразовать файл XML в файл CSV, в котором атрибуты находятся внутри корневого тега.

Я проверил много ссылок, но не нашел ни одного примера, где XML преобразуется в CSV путем анализа атрибутов корневого тега.

Пример XML:

<Products>
<Product ProductID="1234" ProductName="ABC" Category="Food" />
<Product ProductID="1236" ProductName="ABE" Category="Healthcare" />
</Products>

PythonКод (получение ошибки NoneType):

ProductID = member.find('Product').attrib.get('ProductID')
Product_nodes.append(ProductID) 

Ожидаемые результаты в файле CSV:

ProductID, ProductName, Category
1234, ABC,Food
1236, ABE,Healthcare

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Использование библиотек csv и lxml:

import csv

from lxml import etree


xml_content = """<Products>
<Product ProductID="1234" ProductName="ABC" Category="Food" />
<Product ProductID="1236" ProductName="ABE" Category="Healthcare" />
</Products>"""

outfile = "products.csv"
field_names = ["ProductID", "ProductName", "Category"]
root_node = etree.fromstring(xml_content)

filehandle = open(outfile, "w", newline="")
writer = csv.DictWriter(filehandle, fieldnames=field_names)
writer.writeheader()
for node in root_node.findall("Product"):
    writer.writerow(dict(node.attrib))
filehandle.close()
0 голосов
/ 28 марта 2019

Если у вас есть доступ к XQuery или XPath 2.0+, это просто

string-join(//Product/string-join((@ProductID, @ProductName, @Category),','),'&#xa;')
...