Как вы уже догадались, проблема в том, что каждый узел product
имеет несколько img_item
тегов, которые xml2csv
не знает, как обрабатывать (и, просматривая свою документацию, похоже, не имеет возможностидайте ему знать, как обрабатывать эти узлы).
Однако вы можете сделать это довольно легко, используя встроенный модуль csv
.Вам просто нужно решить, как вы хотите разделить URL-адреса различных изображений.В приведенном ниже примере я решил использовать ;
(очевидно, вы не можете использовать ,
, если не используете другой разделитель для столбцов).
Также обратите внимание, что я жестко закодировал заголовки.Это (вполне) можно легко изменить, чтобы заголовки динамически обнаруживались из подэлементов узла product
.
import csv
import xml.etree.ElementTree as ET
string = '''<products>
<product>
<code>722</code>
<ws_code>B515C16CRU</ws_code>
<supplier_code>B515C16CRU</supplier_code>
<images>
<img_item type_name="">https://www.apparel.com.tr/stance-corap-cruker-grey-orap-stance-ankle-bters-3378-72-B.jpg</img_item>
<img_item type_name="">https://www.apparel.com.tr/stance-corap-cruker-grey-orap-stance-ankle-bters-3379-72-B.jpg</img_item>
<img_item type_name="">https://www.apparel.com.tr/stance-corap-cruker-grey-orap-stance-ankle-bters-3380-72-B.jpg</img_item>
</images>
</product>
</products>'''
root = ET.fromstring(string)
headers = ('code', 'ws_code', 'supplier_code', 'images')
with open('test.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
for product in root.iter('product'):
writer.writerow({'code': product.find('code').text,
'ws_code': product.find('ws_code').text,
'supplier_code': product.find('supplier_code').text,
'images': ';'.join(img.text for img in product.iter('img_item'))})
, что приводит к следующему CSV:
code,ws_code,supplier_code,images
722,B515C16CRU,B515C16CRU,https://www.apparel.com.tr/stance-corap-cruker-grey-orap-stance-ankle-bters-3378-72-B.jpg;https://www.apparel.com.tr/stance-corap-cruker-grey-orap-stance-ankle-bters-3379-72-B.jpg;https://www.apparel.com.tr/stance-corap-cruker-grey-orap-stance-ankle-bters-3380-72-B.jpg