compu2000
Goto Top

Powershell - Möglichkeit: XML zu CSV

Guten Abend aus dem Süden,

ich würde gerne über Powershell - Daten aus einer XML Datei in eine CSV konvertieren, hat da jemand schon Erfahrung?

Hierbei würde nachfolgende XML (aus Platzgründen habe ich die XML gekürzt "<ABL> sowie <Bestellung> haben immer den gleichen Aufbau") vorliegen:

<TransferFile>
KundenNummer>22932</KundenNummer>
<RueckmeldeDatum>2020-09-24T09:14:11+01:00</RueckmeldeDatum>
<Bestellungen>
<ABL>
</ABL>
<ABL>
</ABL>
<ABL>
</ABL>
<ABL>
</ABL>
<ABL>
<BelegNummer>12345</BelegNummer>
<Bestellreferenz>7213508</Bestellreferenz>
<Zustelldatum>24.08.2020</Zustelldatum>
<Spedtion>
<Name>Trans-O-Flex</Name>
<Referenznummer>338182</Referenznummer>
</Spedtion>
<image>
<imagename>000000114003438.TIF</imagename>
<content>
</content>
</image>
</ABL>
<ABL>
<BelegNummer>123456</BelegNummer>
<Bestellreferenz>72135084</Bestellreferenz>
<Zustelldatum>24.08.2020</Zustelldatum>
<Spedtion>
<Name>Trans-O-Flex</Name>
<Referenznummer>338182</Referenznummer>
</Spedtion>
<image>
<imagename>000000114003438.TIF</imagename>
<content>
</content>
</image>
</ABL>
<Bestellung>
<BelegNummer>54234567</BelegNummer>
<Bestellreferenz>7268105</Bestellreferenz>
<LieferDatum>2020-09-01T14:01:42+01:00</LieferDatum>
<Spedition>
<Name>Trans-O-Flex</Name>
<Referenznummer>401505</Referenznummer>
</Spedition>
<PDF>
<PdfDateiname>76543456pdf</PdfDateiname>
<content>
</content>
</PDF>
<Positionen>
<Position>
<PositionsNummer>1</PositionsNummer>
<PZN>xxx</PZN>
<ErsatzArtikel>false</ErsatzArtikel>
<Menge>6</Menge>
<Bezeichnung>xxx</Bezeichnung>
<Bestellreferenz/>
</Position>
</Positionen>
</Bestellung>
<Bestellung>
<BelegNummer>542345678</BelegNummer>
<Bestellreferenz>72681058</Bestellreferenz>
<LieferDatum>2020-09-01T14:01:42+01:00</LieferDatum>
<Spedition>
<Name>Trans-O-Flex</Name>
<Referenznummer>4015045</Referenznummer>
</Spedition>
<PDF>
<PdfDateiname>76543456pdf</PdfDateiname>
<content>
</content>
</PDF>
<Positionen>
<Position>
<PositionsNummer>1</PositionsNummer>
<PZN>xxx</PZN>
<ErsatzArtikel>false</ErsatzArtikel>
<Menge>6</Menge>
<Bezeichnung>xxx</Bezeichnung>
<Bestellreferenz/>
</Position>
</Positionen>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
<Bestellung>
</Bestellung>
</Bestellungen>
</TransferFile>

Jetzt würde ich gerne aus allen "Blöcken":

Bsp.-<ABL>:

<ABL>
<BelegNummer>12345</BelegNummer>
<Bestellreferenz>7213508</Bestellreferenz>
<Zustelldatum>24.08.2020</Zustelldatum>
<Spedtion>
<Name>Trans-O-Flex</Name>
<Referenznummer>338182</Referenznummer>
</Spedtion>
<image>
<imagename>000000114003438.TIF</imagename>
<content>
</content>
</image>
</ABL>


sowie Bsp.-<Bestellung>:

<Bestellung>
<BelegNummer>54234567</BelegNummer>
<Bestellreferenz>7268105</Bestellreferenz>
<LieferDatum>2020-09-01T14:01:42+01:00</LieferDatum>
<Spedition>
<Name>Trans-O-Flex</Name>
<Referenznummer>401505</Referenznummer>
</Spedition>
<PDF>
<PdfDateiname>76543456pdf</PdfDateiname>
<content>
</content>
</PDF>
<Positionen>
<Position>
<PositionsNummer>1</PositionsNummer>
<PZN>xxx</PZN>
<ErsatzArtikel>false</ErsatzArtikel>
<Menge>6</Menge>
<Bezeichnung>xxx</Bezeichnung>
<Bestellreferenz/>
</Position>
</Positionen>
</Bestellung>

Daten in zwei CSVs zu schreiben. Gewünschter Aufbau der CSV wäre:

abl.csv

12345;7213508;24.08.2020;Trans-O-Flex;338182;
123456;72135084;24.08.2020;Trans-O-Flex;338182;

Erklärung: Bestellreferenz aus ABL;Belegnummer aus ABL;Zustelldatum aus ABL;Name Spedition aus ABL;Referenznummer Spedition aus ABL;

bestellung.csv

7268105;54234567;2020-09-01T14:01:42+01:00;Trans-O-Flex;401505;
72681058;542345678;2020-09-01T14:01:42+01:00;Trans-O-Flex;4015045;

Erklärung: Bestellreferenz aus Bestellung;Belegnummer aus Bestellung;Lieferdatum aus Bestellung;Name Spedition aus ABL;Referenznummer Spedition aus ABL;

Wie würde so etwas mit Powershell aussehen?

Content-ID: 609537

Url: https://administrator.de/forum/powershell-moeglichkeit-xml-zu-csv-609537.html

Ausgedruckt am: 21.02.2025 um 10:02 Uhr

146189
146189 02.10.2020 aktualisiert um 19:36:50 Uhr
Goto Top
So => XML in CSV umwandeln

$ordner = 'D:\bestellungen'  
ls $ordner -File -Filter *.xml | %{
    $xml = New-Object XML
    $xml.Load($_.FullName)
    $xml.TransferFile.Bestellungen.ABL | select Belegnummer,Bestellreferenz,Zustelldatum,@{n='Spedition';e={$_.Spedition.Name}},@{n='Referenznummer Spedition';e={$_.Spedition.Referenznummer}} | export-csv (join-path $ordner "abl_$($_.Basename).csv") -Delimiter ";" -NoType -Encoding UTF8  
    $xml.TransferFile.Bestellungen.Bestellung | select Belegnummer,BestellReferenz,LieferDatum,@{n='Spedition';e={$_.Spedition.Name}},@{n='Referenznummer Spedition';e={$_.Spedition.Referenznummer}} | export-csv (join-path $ordner "bestellungen_$($_.Basename).csv") -Delimiter ";" -NoType -Encoding UTF8  
}
compu2000
compu2000 03.10.2020 um 00:55:58 Uhr
Goto Top
Zitat von @146189:

So => XML in CSV umwandeln

> $ordner = 'D:\bestellungen'  
> ls $ordner -File -Filter *.xml | %{
>     $xml = New-Object XML
>     $xml.Load($_.FullName)
>     $xml.TransferFile.Bestellungen.ABL | select Belegnummer,Bestellreferenz,Zustelldatum,@{n='Spedition';e={$_.Spedition.Name}},@{n='Referenznummer Spedition';e={$_.Spedition.Referenznummer}} | export-csv (join-path $ordner "abl_$($_.Basename).csv") -Delimiter ";" -NoType -Encoding UTF8  
>     $xml.TransferFile.Bestellungen.Bestellung | select Belegnummer,BestellReferenz,LieferDatum,@{n='Spedition';e={$_.Spedition.Name}},@{n='Referenznummer Spedition';e={$_.Spedition.Referenznummer}} | export-csv (join-path $ordner "bestellungen_$($_.Basename).csv") -Delimiter ";" -NoType -Encoding UTF8  
> }
> 

Sehr gut, vielen lieben Dank! Eine Frage habe dazu noch, wenn ich das ausführe, würde ich gerne als Abschlusszeichen ebenfalls ein Semikolon haben. Wie bekomme ich das hin?
146189
Lösung 146189 03.10.2020 aktualisiert um 08:25:22 Uhr
Goto Top
$ordner = 'D:\bestellungen'  
ls $ordner -File -Filter *.xml | %{
    $xml = New-Object XML
    $xml.Load($_.FullName)
    ($xml.TransferFile.Bestellungen.ABL | select Belegnummer,Bestellreferenz,Zustelldatum,@{n='Spedition';e={$_.Spedition.Name}},@{n='Referenznummer Spedition';e={$_.Spedition.Referenznummer}} | ConvertTo-CSV -Delimiter ";" -NoType) -replace '$',';' | out-file (join-path $ordner "abl_$($_.Basename).csv") -Encoding UTF8  
    ($xml.TransferFile.Bestellungen.Bestellung | select Belegnummer,BestellReferenz,LieferDatum,@{n='Spedition';e={$_.Spedition.Name}},@{n='Referenznummer Spedition';e={$_.Spedition.Referenznummer}} | ConvertTo-CSV -Delimiter ";" -NoType) -replace '$',';' | out-file (join-path $ordner "bestellungen_$($_.Basename).csv") -Encoding UTF8  
}