0

我有一个包含产品的 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()

4

0 回答 0