我有一个包含产品的 XML 文件,我想将其转换为 CSV 以便将其导入 Woocommerce。
XML 示例是这样的:
<product id="1313">
<name><![CDATA[TOTAL ΑΔΙΑΒΡΟΧΗ ΚΑΠΑΡΝΤΙΝΑ Β.Τ L (THTRC031.L)]]></name>
<modified>2020-06-29T08:45:09+03:00</modified>
<link>https://www.bax.tools/total-αδιαβροχη-καπαρντινα-β.τ-l-(thtrc031.l)</link>
<price_with_vat>10.9</price_with_vat>
<category id="142"><![CDATA[ΑΔΙΑΒΡΟΧΑ]]></category>
<image>https://www.bax.tools/photos/big/THTRC031.L.jpg</image>
<thumbnail>https://www.bax.tools/photos/thumbs/THTRC031.L.jpg</thumbnail>
<manufacturer><![CDATA[TOTAL]]></manufacturer>
<shipping type="accurate" currency="euro"></shipping>
<sku>THTRC031.L</sku>
<ssku></ssku>
<availability>Διαθέσιμο</availability>
<stock>Y</stock>
<description><![CDATA[]]></description>
<specs>
<rows>
<spec name="ΠΑΧΟΣ" value="0.33mm" />
<spec name="ΒΑΡΟΣ" value="1 Kg" />
<spec name="ΣΥΣΚΕΥΑΣΙΑ" value="20 ΤΕΜ" />
</rows>
</specs>
</product>
<product id="1314">
<name><![CDATA[TOTAL ΑΔΙΑΒΡΟΧΗ ΚΑΠΑΡΝΤΙΝΑ Β.Τ XL (THTRC031.XL)]]></name>
<modified>2020-06-29T08:45:09+03:00</modified>
<link>https://www.bax.tools/total-αδιαβροχη-καπαρντινα-β.τ-xl-(thtrc031.xl)</link>
<price_with_vat>10.9</price_with_vat>
<category id="142"><![CDATA[ΑΔΙΑΒΡΟΧΑ]]></category>
<image>https://www.bax.tools/photos/big/THTRC031.XL.jpg</image>
<thumbnail>https://www.bax.tools/photos/thumbs/THTRC031.XL.jpg</thumbnail>
<manufacturer><![CDATA[TOTAL]]></manufacturer>
<shipping type="accurate" currency="euro"></shipping>
<sku>THTRC031.XL</sku>
<ssku></ssku>
<availability>Διαθέσιμο</availability>
<stock>Y</stock>
<description><![CDATA[]]></description>
<specs>
<rows>
<spec name="ΠΑΧΟΣ" value="0.33mm" />
<spec name="ΒΑΡΟΣ" value="1 Kg" />
<spec name="ΣΥΣΚΕΥΑΣΙΑ" value="20 ΤΕΜ" />
</rows>
</specs>
</product>
问题是我希望每个 spec->name 和 spec->value 在 csv 中如下所示
ID, Name, Price, Attribute 1 name, Attribute 1 value(s), Attribute 2 name, Attribute 2 value(s), Attribute 3 name, Attribute 3 value(s)
1313, TOTAL ΑΔΙΑΒΡΟΧΗ ΚΑΠΑΡΝΤΙΝΑ Β.Τ L (THTRC031.L), 10.9, ΠΑΧΟΣ, 0.33mm, ΒΑΡΟΣ, 1 Kg, ΣΥΣΚΕΥΑΣΙΑ, 20 ΤΕΜ
1314, TOTAL ΑΔΙΑΒΡΟΧΗ ΚΑΠΑΡΝΤΙΝΑ Β.Τ XL (THTRC031.XL), 10.9, ΠΑΧΟΣ, 0.33mm, ΒΑΡΟΣ, 1 Kg, ΣΥΣΚΕΥΑΣΙΑ, 20 ΤΕΜ
属性可以超过 3 个,所以我还需要在代码中使用循环来生成属性 X 名称、属性 X 值等...
到目前为止我编写的代码如下,但我知道它不正确。我对python不太熟悉,我正在谷歌搜索。所以我想从你们那里得到一些帮助。太感谢了!
import xml.etree.ElementTree as ET
import csv
tree = ET.parse("prod.xml")
root = tree.getroot()
# open a file for writing
Resident_data = open('out.csv', 'w', encoding="utf-8", newline='')
# create the csv writer object
csvwriter = csv.writer(Resident_data)
resident_head = []
count = 0
for member in root.findall('product'):
resident = []
address_list = []
if count == 0:
resident_head.append("ID")
resident_head.append("Name")
resident_head.append("Price")
resident_head.append("Image")
resident_head.append("Attribute 1 name")
resident_head.append("Attribute 1 value(s)")
csvwriter.writerow(resident_head)
count = count + 1
id = member.attrib.get("id")
resident.append(id)
name = member.find("name").text
resident.append(name)
price = member.find("price_with_vat").text
resident.append(price)
image = member.find("image").text
resident.append(image)
csvwriter.writerow(resident)
Resident_data.close()