rb03.de
Goto Top

Powershell XML umwandeln

Hallo,

bisher habe ich mich mehr oder weniger erfolgreich durch sämtliche xml Foren gelesen komme aber jetzt leider an einen Punkt an dem es seit mehreren Wochen nicht weiter geht. Ich möchte zum Teil sehr große XML Dateien in entweder csv oder txt umwandel, ich habe dazu das nachfolgende Script geschrieben welches mir auch jeden Knoten in eine Zeile schreibt, was allerdings fehlt und wo ich nun nicht weiter kommen: Ich hätte gerne nach jeden Tag einen Trenner Semikolon oder Komma.

Content-ID: 640947

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

NordicMike
NordicMike 15.01.2021 um 10:41:33 Uhr
Goto Top
Du kannst mit Text oder eine Tabelle nur zwei Dimensionen abdecken. Wie soll es sich verhalten, wenn du mehr als zwei mal verzweigst?
rb03.de
rb03.de 15.01.2021 um 11:42:46 Uhr
Goto Top
Zwei Dimensionen sind ausreichend, ich öffne aktuell die XML Datei mit Excel, nur möchte ich das ganze automatisieren.
In Excel habe ich z.B als Spaltenbeschriftung das xml Tag.
147323
147323 19.01.2021 aktualisiert um 12:58:09 Uhr
Goto Top
Ich hätte gerne nach jeden Tag einen Trenner Semikolon oder Komma.
$in = 'C:\Daten\99.xml'  
$out = 'C:\Daten\99.txt'  
$XmlData = New-Object XML
$xmlData.Load($in)
$XmlData.document.BkToCstmrDbtCdtNtfctn.Ntfctn.Ntry.NtryDtls.TxDtls | %{"$($_.InnerText);"} | out-file $out -Encoding UTF8   
Gruß j.
rb03.de
rb03.de 20.01.2021, aktualisiert am 21.01.2021 um 13:34:20 Uhr
Goto Top
Hallo jokari,
vielen Dank für die Unterstützung!! Im Ergebnis habe ich nun nach jeder Zeile ein Semikolon, das freut mich aber ich wollte nach jedem Knoten
147323
147323 20.01.2021 aktualisiert um 15:09:40 Uhr
Goto Top
Dann beschreibe besser was du willst dann erhältst du auch passende Antworten... Hier kennt keiner den Inhalt der XML.
Einfach als Beispiel IST und SOLL posten dann kommt hier auch jeder mit.

Wie man XML zu CSV wandelt kannst du auch schon hier nachlesen
XML in CSV umwandeln
rb03.de
rb03.de 21.01.2021, aktualisiert am 03.02.2021 um 07:02:47 Uhr
Goto Top
Ich versuche es:
So sieht es aus wenn ich die Xml Datei mit mieinem Script bearbeite:

02-999999Beleg 12349876DE00080110020000000000000001444912865.2465.42PMNT+99909+K9.18GELTCRED9.18TECREDMax MusterDEMusterstrasse 2699999 TeststadtD999376016Test FirmaDE99ZZZ00000099999BIC Vertragskonto 9999999 RG 1234567/0BIC

So soll es aussehen:
02-999999;Beleg 12349876;DE0008011002;000000000000000;1444912865.2465.42;PMNTIDDT;UPDD;NRTI+;9.18;E
147323
147323 21.01.2021 aktualisiert um 08:18:39 Uhr
Goto Top
Das ist keine valide XML Datei .... So kann man damit nichts anfangen.
NordicMike
NordicMike 21.01.2021 aktualisiert um 08:57:30 Uhr
Goto Top
Das ist keine valide XML Datei

Natürlich nicht, er hat ja auch nur die Ausgaben gepostet, nicht die Original XML Datei.

Aber mit ein bisschen Googeln und lernen, was der Befehl macht, kommt er schon drauf, wie man das macht.
147323
147323 21.01.2021 aktualisiert um 09:49:07 Uhr
Goto Top
Den Link oben aus dem hiesigen Forum lesen wäre ja schon ein Anfang ... Aber dafür hat's wohl beim TO offensichtlich nicht gereicht, da stehts ja eigentlich schon auf dem Serviertablett.
rb03.de
rb03.de 21.01.2021 um 10:31:31 Uhr
Goto Top
Der Link ist gut, allerdings funktioniert eine Erstellung in dieser Art nur bis 4 MB ,alles was größer ist wird unvollständig in die CSV Datei geschrieben. Die beste Lösung war bisher die oben beschriebene mit innertext, allerdings ist diese auch unbrauchbar wenn ein Trennzeichen fehlt da ich die Daten noch weiterbearbeiten möchte.
Die original XML Datei kann ich leider nicht zur Verfügung stellen, diese enthält Kundendaten. Es geht mir auch nur um das Trennzeichen an der richtigen Stelle.
147323
147323 21.01.2021 aktualisiert um 11:18:36 Uhr
Goto Top
Zitat von @rb03.de:

Der Link ist gut, allerdings funktioniert eine Erstellung in dieser Art nur bis 4 MB ,alles was größer ist wird unvollständig in die CSV Datei geschrieben.
Nö das ist Blödsinn! Habe ich gerade mal probiert geht problemlos auch mit 200MB großen XMLs, scheint deine Mühle zu schwach auf der Brust zu sein oder du hast einen Fehler eingebaut.
147323
147323 21.01.2021 aktualisiert um 17:40:49 Uhr
Goto Top
Also dann hier nochmal zum einfachen Nachlesen und Nachmachen und verstehen ...

Beispiel XML
<?xml version="1.0" encoding="utf-8"?>  
<root>
	<Items>
		<Item>
			<Vorname>Max</Vorname>
			<Nachname>Muster</Nachname>
			<Adresse>Musterstr. 6</Adresse>
			<PLZ>99999</PLZ>
			<Ort>Musterhausen</Ort>
		</Item>
		<Item>
			<Vorname>Maria</Vorname>
			<Nachname>Musterfrau</Nachname>
			<Adresse>Musterstr. 99</Adresse>
			<PLZ>99999</PLZ>
			<Ort>Musterhausen</Ort>
		</Item>
	</Items>
</root>

Code
$in = 'A:\test.xml'  
$out = 'A:\test.csv'  
$xml = New-Object XML
$xml.Load($in)
$xml.root.Items.Item | export-csv $out -Delimiter ";" -NoType -Encoding UTF8  
Ergebnis nach Export in CSV
"Vorname";"Nachname";"Adresse";"PLZ";"Ort"  
"Max";"Muster";"Musterstr. 6";"99999";"Musterhausen"  
"Maria";"Musterfrau";"Musterstr. 99";"99999";"Musterhausen"  
Also, works as expected!

Jetzt bist du dran.
Ich bin jetzt raus.
rb03.de
rb03.de 22.01.2021 um 12:34:15 Uhr
Goto Top
Hallo jokari, vielen Dank für Deinen Einsatz.
Ja das man so ein Trennzeichen setzen kann ist mir klar, aber ich benutze nun mal "InnerText" weil ich eine Menge Daten damit auslese, die ich gerne weiterverarbeiten würde.
Aber auch vielen Dank für den Testaufbau, ich hoffe damit kommen wir zum Ziel.
Wenn ich also Deinen Code auf "InnerText" anpasse bekomme ich eben ein Ergebnis ohne Trennzeichen.
Evtl. wäre es besser wenn ich" InnerText" durch einen anderen Befehl ersetze?

$in = 'C:\Daten\new-file.xml'  
$out = 'C:\Daten\190.txt'  
$xml = New-Object XML
$xml.Load($in)
$xml.root.InnerText | Out-File $out -Encoding UTF8

Ergebnis nach Export in CSV
MaxMusterMusterstr. 699999MusterhausenMariaMusterfrauMusterstr. 9999999Musterhausen
147323
147323 22.01.2021 aktualisiert um 12:37:50 Uhr
Goto Top
Du brauchst und darfst für das obige Beispiel das InnerText nicht benutzen das zerstört in diesem Fall die schon vorhandene Objektstruktur und die ist für den Export via export-csv zwingend nötig, also weglassen und schon läuft das !
rb03.de
rb03.de 22.01.2021 um 13:53:43 Uhr
Goto Top
Vielen Dank, damit weiß ich diese Lösung nicht weiter verfolgen brauche.
NordicMike
NordicMike 22.01.2021 um 14:20:00 Uhr
Goto Top
Hast du eine einzige Anleitung zu einem dieser Befehlssätze gelesen?
rb03.de
rb03.de 22.01.2021 um 15:22:09 Uhr
Goto Top
Google Dir die Antwort!
NordicMike
NordicMike 25.01.2021 um 07:46:34 Uhr
Goto Top
Google sagt: Nein. Dann habe ich nochmal gegoogelt, dann war die Antwort: 42