XML zu CSV in Powershell
Hallo Zusammen,
ich habe schon einmal hilfe gebraucht bei einem Skript in Powershell was XML zu CSV umwandelt. Ich dachte eigendlich in meinem jugendlichem leichtsinn, das ich dies dann auch alleine bewerkstelligen könnte und das skript umbauen kann wenn ich eine andere XML bekomme.
Leider ist das nicht der fall :D
so sieht meine XML datei aus die ich gerne in CSV umwandeln möchte. Ich brauche nicht unbedingt alle Felder davon. Nur würde ich auch gern Verstehen wie ich so eine XML datei in CSV umwandeln kann. Ich habe sowas schon mal für Otto gebraucht:
Nur ist der Aufbau der Otto Datei anders als bei der neuen XML Datei, weswegen ich auch nach vielen Probieren einfach nicht weiter komme. Vielleicht kann mir jemand versuchen zu erklären wie ich das Skript umschreiben müsste damit es Funktioniert
ich habe schon einmal hilfe gebraucht bei einem Skript in Powershell was XML zu CSV umwandelt. Ich dachte eigendlich in meinem jugendlichem leichtsinn, das ich dies dann auch alleine bewerkstelligen könnte und das skript umbauen kann wenn ich eine andere XML bekomme.
Leider ist das nicht der fall :D
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns1:ORDERS xmlns:ns1="wbd:com.weltbild:schemas/ordermanagement/opentrans">
<ns1:ORDER>
<ns1:ORDER_HEADER>
<ns1:ORDER_INFO>
<ns1:ORDER_ID>4500001256</ns1:ORDER_ID>
<ns1:ORDER_DATE>19.09.2019</ns1:ORDER_DATE>
<ns1:ORDER_PARTIES>
<ns1:BUYER_PARTY>
<ns1:PARTY>
<ns1:PARTY_ID type="GLN">4026411908746</ns1:PARTY_ID>
</ns1:PARTY>
</ns1:BUYER_PARTY>
<ns1:SUPPLIER_PARTY>
<ns1:PARTY>
<ns1:PARTY_ID type="GLN">4042882000002</ns1:PARTY_ID>
</ns1:PARTY>
</ns1:SUPPLIER_PARTY>
<ns1:INVOICE_PARTY>
<ns1:PARTY>
<ns1:PARTY_ID type="buyer_specific">700405566</ns1:PARTY_ID>
<ns1:ADDRESS>
<ns1:TITLE>Frau</ns1:TITLE>
<ns1:NAME>Stefanie Blattner</ns1:NAME>
<ns1:STREET>Johanneskirchner Str. 8</ns1:STREET>
<ns1:ZIP>85774</ns1:ZIP>
<ns1:CITY>Unterföhring</ns1:CITY>
<ns1:COUNTRYCODE>DE</ns1:COUNTRYCODE>
</ns1:ADDRESS>
</ns1:PARTY>
</ns1:INVOICE_PARTY>
<ns1:SHIPMENT_PARTIES>
<ns1:DELIVERY_PARTY>
<ns1:PARTY>
<ns1:PARTY_ID type="buyer_specific">700405566</ns1:PARTY_ID>
<ns1:ADDRESS>
<ns1:TITLE>Frau</ns1:TITLE>
<ns1:NAME>Stefanie Blattner</ns1:NAME>
<ns1:STREET>Johanneskirchner Str. 8</ns1:STREET>
<ns1:ZIP>85774</ns1:ZIP>
<ns1:CITY>Unterföhring</ns1:CITY>
<ns1:COUNTRYCODE>DE</ns1:COUNTRYCODE>
</ns1:ADDRESS>
</ns1:PARTY>
</ns1:DELIVERY_PARTY>
</ns1:SHIPMENT_PARTIES>
</ns1:ORDER_PARTIES>
<ns1:PRICE_CURRENCY>EUR</ns1:PRICE_CURRENCY>
<ns1:REMARK type="ClientReferenceNumber">520081097</ns1:REMARK>
<ns1:TERMS_AND_CONDITIONS>ZZ</ns1:TERMS_AND_CONDITIONS>
</ns1:ORDER_INFO>
</ns1:ORDER_HEADER>
<ns1:ORDER_ITEM_LIST>
<ns1:ORDER_ITEM>
<ns1:LINE_ITEM_ID>0010</ns1:LINE_ITEM_ID>
<ns1:ARTICLE_ID>
<ns1:SUPPLIER_AID>8878791</ns1:SUPPLIER_AID>
<ns1:BUYER_AID type="buyer_specific">86264505</ns1:BUYER_AID>
<ns1:DESCRIPTION_SHORT>miaVILLA Hakenleiste Leuchtturm Weiß</ns1:DESCRIPTION_SHORT>
</ns1:ARTICLE_ID>
<ns1:QUANTITY>1</ns1:QUANTITY>
<ns1:ORDER_UNIT>PCE</ns1:ORDER_UNIT>
<ns1:ARTICLE_PRICE type="upd_gros_customer">
<ns1:PRICE_AMOUNT>39.99</ns1:PRICE_AMOUNT>
</ns1:ARTICLE_PRICE>
<ns1:ARTICLE_PRICE type="net_list">
<ns1:PRICE_AMOUNT>20.00</ns1:PRICE_AMOUNT>
</ns1:ARTICLE_PRICE>
<ns1:REMARK type="Description">0821/2672151$$judith.hobner@XXX.com</ns1:REMARK>
</ns1:ORDER_ITEM>
<ns1:ORDER_ITEM>
<ns1:LINE_ITEM_ID>0020</ns1:LINE_ITEM_ID>
<ns1:ARTICLE_ID>
<ns1:SUPPLIER_AID>9161395</ns1:SUPPLIER_AID>
<ns1:BUYER_AID type="buyer_specific">100450508</ns1:BUYER_AID>
<ns1:DESCRIPTION_SHORT>miaVILLA Deckenleuchte Mare Blau/Grau</ns1:DESCRIPTION_SHORT>
</ns1:ARTICLE_ID>
<ns1:QUANTITY>1</ns1:QUANTITY>
<ns1:ORDER_UNIT>PCE</ns1:ORDER_UNIT>
<ns1:ARTICLE_PRICE type="upd_gros_customer">
<ns1:PRICE_AMOUNT>59.99</ns1:PRICE_AMOUNT>
</ns1:ARTICLE_PRICE>
<ns1:ARTICLE_PRICE type="net_list">
<ns1:PRICE_AMOUNT>31.25</ns1:PRICE_AMOUNT>
</ns1:ARTICLE_PRICE>
</ns1:ORDER_ITEM>
</ns1:ORDER_ITEM_LIST>
<ns1:ORDER_SUMMARY>
<ns1:TOTAL_ITEM_NUM>2</ns1:TOTAL_ITEM_NUM>
<ns1:TOTAL_AMOUNT>99.98</ns1:TOTAL_AMOUNT>
</ns1:ORDER_SUMMARY>
</ns1:ORDER>
</ns1:ORDERS>
so sieht meine XML datei aus die ich gerne in CSV umwandeln möchte. Ich brauche nicht unbedingt alle Felder davon. Nur würde ich auch gern Verstehen wie ich so eine XML datei in CSV umwandeln kann. Ich habe sowas schon mal für Otto gebraucht:
$xmlfiles = ls .\ -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
}
Nur ist der Aufbau der Otto Datei anders als bei der neuen XML Datei, weswegen ich auch nach vielen Probieren einfach nicht weiter komme. Vielleicht kann mir jemand versuchen zu erklären wie ich das Skript umschreiben müsste damit es Funktioniert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 661838
Url: https://administrator.de/forum/xml-zu-csv-in-powershell-661838.html
Ausgedruckt am: 22.12.2024 um 09:12 Uhr
1 Kommentar
$xmlfiles = ls .\ -Filter *.xml -File
foreach($file in $xmlfiles){
$xml = New-Object XML
$xml.Load($file.Fullname)
$xml.Orders.Order.Order_Item_List.Order_Item | %{
[pscustomobject]@{
OrderNo = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_ID
OrderDate = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_Date
Name = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_Parties.Invoice_Party.Party.Address.Name
Street = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_Parties.Invoice_Party.Party.Address.Street
Zip = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_Parties.Invoice_Party.Party.Address.Zip
City = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_Parties.Invoice_Party.Party.Address.City
Country = $_.ParentNode.ParentNode.Order_Header.Order_Info.Order_Parties.Invoice_Party.Party.Address.CountryCode
ItemNo = $_.Article_Id.Buyer_Aid.innerText
QuantityUnit = $_.Order_Unit
BuyingPrice = $_.Article_Price | ?{$_.type -eq 'upd_gros_customer'} | %{$_.Price_Amount}
Quantity = $_.Quantity
}
} | export-csv (join-path $file.DirectoryName "$($file.BaseName).csv") -NoTypeInformation -Delimiter ";" -Encoding UTF8
}
Vielleicht kann mir jemand versuchen zu erklären wie ich das Skript umschreiben müsste
Dazu musst du nur wissen wie ein XML-DOM funktioniert und wie man darin navigiert. Da das hier .NET Objekte sind gilt auch die DOKU für das .NEThttps://docs.microsoft.com/de-de/dotnet/api/system.xml.xmldocument?view= ...