springstil
Goto Top

XML zu CSV, aber richtig Formatiert?

Hallo zusammen,

ich würde gern mit Powershell eine XML zu einer CSV konvertieren.

Grundsätzlich bekomme ich das auch hin aber es fehlen mir einiges an Angaben und da ich nicht so den plan von Powershell habe benötige ich hier mal jemand der mir dabei helfen kann face-smile

Die XML sieht folgendermaßen aus:
<?xml version="1.0" encoding="ISO-8859-1"?>  
<ottopartner xmlns="http://www.ottogroupb2b.com/ottopartner">  
    <LKZ>82057</LKZ>
    <PurchaseOrder>
        <BuyerILN>4029686000001</BuyerILN>
        <OrderNo>011033</OrderNo>
        <OrderDate>2021-01-06T06:17:27.000+01:00</OrderDate>
        <OrderCurrency>EUR</OrderCurrency>
        <TotalOrderValue>173.42</TotalOrderValue>
        <DeliveryDate>2021-01-08</DeliveryDate>
        <DeliveryAddress>
            <Address>
                <ILN>4029686663282</ILN>
                <Name>Name des Kunden</Name>
                <Street>StraßeBlaBla</Street>
                <Zip>99999</Zip>
                <City>Köln</City>
                <Country>GERMANY</Country>
                <CountryISOCode>DE</CountryISOCode>
            </Address>
        </DeliveryAddress>
        <ShippingMode>Carrier</ShippingMode>
        <TermOfShipment>free</TermOfShipment>
        <ItemPackaging>NormCarton</ItemPackaging>
        <TermsOfPayment>10-days-net</TermsOfPayment>
        <OrderItem>
            <ItemNo>104727OT-00</ItemNo>
            <ClientItemNo>18563222</ClientItemNo>
            <ItemDesc>Zapfengirlande</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529098615</EAN>
                <BuyingPrice>8.74</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>5018033OT-01</ItemNo>
            <ClientItemNo>22049616</ClientItemNo>
            <ItemDesc>Dekofigur Hase</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529400937</EAN>
                <BuyingPrice>7.86</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>5016584OT-40</ItemNo>
            <ClientItemNo>25201120</ClientItemNo>
            <ItemDesc>Kerzenhalter</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529101469</EAN>
                <BuyingPrice>8.74</BuyingPrice>
                <Quantity>4</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>6216511OT-00</ItemNo>
            <ClientItemNo>28653964</ClientItemNo>
            <ItemDesc>Kerzenhalter</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529096970</EAN>
                <BuyingPrice>15.29</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>6016921OT-49</ItemNo>
            <ClientItemNo>49637964</ClientItemNo>
            <ItemDesc>Vase,Crumble</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529096635</EAN>
                <BuyingPrice>7.86</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>7516510OT-00</ItemNo>
            <ClientItemNo>62339506</ClientItemNo>
            <ItemDesc>Hänger Hirsch,Sten</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529097441</EAN>
                <BuyingPrice>10.92</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>6016922OT-49</ItemNo>
            <ClientItemNo>64679161</ClientItemNo>
            <ItemDesc>Vase,Crumble</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529096659</EAN>
                <BuyingPrice>10.92</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>534534OT-38</ItemNo>
            <ClientItemNo>76234940</ClientItemNo>
            <ItemDesc>Schale,Day"N"Night</ItemDesc>  
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529109823</EAN>
                <BuyingPrice>7.86</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>534535OT-38</ItemNo>
            <ClientItemNo>77244124</ClientItemNo>
            <ItemDesc>Schale,Day"N"Night</ItemDesc>  
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529109830</EAN>
                <BuyingPrice>10.92</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>6216518OT-00</ItemNo>
            <ClientItemNo>87380433</ClientItemNo>
            <ItemDesc>Etagere</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529097045</EAN>
                <BuyingPrice>15.29</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>6216517OT-00</ItemNo>
            <ClientItemNo>87458330</ClientItemNo>
            <ItemDesc>Etagere</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529097038</EAN>
                <BuyingPrice>7.86</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>5216501OT-01</ItemNo>
            <ClientItemNo>89138819</ClientItemNo>
            <ItemDesc>LED Girlande Sterne</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529101940</EAN>
                <BuyingPrice>8.74</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>5616522OT-00</ItemNo>
            <ClientItemNo>92061817</ClientItemNo>
            <ItemDesc>Teller,Hammered</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529095836</EAN>
                <BuyingPrice>13.10</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
        <OrderItem>
            <ItemNo>5616533OT-00</ItemNo>
            <ClientItemNo>97951733</ClientItemNo>
            <ItemDesc>Teelichthalter</ItemDesc>
            <QuantityUnit>PCE</QuantityUnit>
            <OrderSKU>
                <Size> </Size>
                <EAN>4003529095850</EAN>
                <BuyingPrice>13.10</BuyingPrice>
                <Quantity>1</Quantity>
            </OrderSKU>
        </OrderItem>
    </PurchaseOrder>
</ottopartner>

Das benötige ich als CSV zum einspielen.. Jedoch brauch ich auch nicht alle Felder. So ist es mir z.b nur wichtig das ich die Komplette Adresse habe, die Quantity, ItemNo und OrderNo.

Ich müsste das aber Pro Artikel in einer reihe haben (horizontal)

Der einfache teil ist bestimmt, das die XML immer mit Order beginnt und dann einfach zahlen dahinter hat. Es kann also auch vorkommen das sich in einem Order 10 XML befinden, die alle mit Order beginnen.

Habt ihr da ne Idee wie man das am besten umsetzen kann?

Content-ID: 647016

Url: https://administrator.de/contentid/647016

Ausgedruckt am: 21.11.2024 um 20:11 Uhr

147323
Lösung 147323 01.02.2021 aktualisiert um 11:39:08 Uhr
Goto Top
Is eh immer die selbe Leier ...
$xmlfiles = ls 'D:\Orders' -Filter *.xml -File  
foreach($file in $xmlfiles){
    $xml = New-Object XML
    $xml.Load($file.Fullname)
    
    $xml.ottopartner.PurchaseOrder.OrderItem | %{
        [pscustomobject]@{
            OrderNo = $_.ParentNode.OrderNo
            OrderDate = $_.ParentNode.OrderDate
            Name = $_.ParentNode.DeliveryAddress.Address.Name
            Street = $_.ParentNode.DeliveryAddress.Address.Street
            Zip = $_.ParentNode.DeliveryAddress.Address.Zip
            City = $_.ParentNode.DeliveryAddress.Address.City
            Country = $_.ParentNode.DeliveryAddress.Address.Country
            ItemNo = $_.ItemNo
            EAN = $_.OrderSKU.EAN
            QuantityUnit = $_.QuantityUnit
            BuyingPrice = $_.OrderSKU.BuyingPrice
            Quantity = $_.OrderSKU.Quantity
        }
    } | export-csv (join-path $file.DirectoryName "$($file.BaseName).csv") -NoTypeInformation -Delimiter ";" -Encoding UTF8 -verbose  
}
Gruß j.
Springstil
Springstil 01.02.2021 um 11:53:07 Uhr
Goto Top
Vielen Dank dafür!

Ich habe noch ein paar die ich von XML auf CSV umstellen muss. Aber mit dem Skript erklärt es sich für mich glaube ich ganz gut wie ich das machen muss. Vielen lieben dank face-smile