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:
Jetzt würde ich gerne aus allen "Blöcken":
Bsp.-<ABL>:
sowie Bsp.-<Bestellung>:
Daten in zwei CSVs zu schreiben. Gewünschter Aufbau der CSV wäre:
abl.csv
Erklärung: Bestellreferenz aus ABL;Belegnummer aus ABL;Zustelldatum aus ABL;Name Spedition aus ABL;Referenznummer Spedition aus ABL;
bestellung.csv
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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 609537
Url: https://administrator.de/forum/powershell-moeglichkeit-xml-zu-csv-609537.html
Ausgedruckt am: 21.02.2025 um 10:02 Uhr
3 Kommentare
Neuester Kommentar

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
}

$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
}