lianenschwinger
Goto Top

XML Datei mit Powershell splitten

Hallo,

ich habe eine riesige Exportdatei im XML-Format die ich nicht weiterverarbeiten kann.
Der Aufbau ist wie folgt:
<?xml version="1.0" encoding="ISO-8859-1"?>   
<ERGEBNISSE>
	<CALC>
		<MANDANT/>
		<ARTNO>1234567</ARTNO>
		<ORDERNO/>
		<PRAEFERENZ>1</PRAEFERENZ>
		<PRODCOU>DE</PRODCOU>
		<SELLCOU>TN</SELLCOU>
		<DATUM>01.01.2017</DATUM>
		<UHRZEIT>10:50:21</UHRZEIT>
		<AWRUL>DE</AWRUL>
		<PREFUL>DE</PREFUL>
		<EXWPREIS>36,57</EXWPREIS>
		<PPER>1</PPER>
		<MINEXWPREIS>0,075</MINEXWPREIS>
	</CALC>
	<CALC>
		<MANDANT/>
		<ARTNO>1234567</ARTNO>
		<ORDERNO/>
		<PRAEFERENZ>1</PRAEFERENZ>
		<PRODCOU>DE</PRODCOU>
		<SELLCOU>XC</SELLCOU>
		<DATUM>01.01.2017</DATUM>
		<UHRZEIT>10:50:21</UHRZEIT>
		<AWRUL>DE</AWRUL>
		<PREFUL>DE</PREFUL>
		<EXWPREIS>36,57</EXWPREIS>
		<PPER>1</PPER>
		<MINEXWPREIS>0,075</MINEXWPREIS>
	</CALC>
	<CALC>
		<MANDANT/>
		<ARTNO>1234567</ARTNO>
		<ORDERNO/>
		<PRAEFERENZ>1</PRAEFERENZ>
		<PRODCOU>DE</PRODCOU>
		<SELLCOU>XL</SELLCOU>
		<DATUM>01.01.2017</DATUM>
		<UHRZEIT>10:50:21</UHRZEIT>
		<AWRUL>DE</AWRUL>
		<PREFUL>DE</PREFUL>
		<EXWPREIS>36,57</EXWPREIS>
		<PPER>1</PPER>
		<MINEXWPREIS>0,075</MINEXWPREIS>
	</CALC>
	<CALC>
		<MANDANT/>
		<ARTNO>1234567</ARTNO>
		<ORDERNO/>
		<PRAEFERENZ>1</PRAEFERENZ>
		<PRODCOU>DE</PRODCOU>
		<SELLCOU>XS</SELLCOU>
		<DATUM>01.01.2017</DATUM>
		<UHRZEIT>10:50:21</UHRZEIT>
		<AWRUL>DE</AWRUL>
		<PREFUL>DE</PREFUL>
		<EXWPREIS>36,57</EXWPREIS>
		<PPER>1</PPER>
		<MINEXWPREIS>0,075</MINEXWPREIS>
	</CALC>
</ERGEBNISSE>

Ich benötige ein Powershell-Script welches die Datei splittet, so dass pro Datei ein Node vom Typ CALC enthalten ist.
Alsa DAteiname wäre es schön eine Kombination aus ARTNO_PRODCOU_SELLCOU zu bekommen.

Datei 1 (1234567_DE_TN.xml):
<?xml version="1.0" encoding="ISO-8859-1"?>   
<ERGEBNISSE>
	<CALC>
		<MANDANT/>
		<ARTNO>1234567</ARTNO>
		<ORDERNO/>
		<PRAEFERENZ>1</PRAEFERENZ>
		<PRODCOU>DE</PRODCOU>
		<SELLCOU>TN</SELLCOU>
		<DATUM>01.01.2017</DATUM>
		<UHRZEIT>10:50:21</UHRZEIT>
		<AWRUL>DE</AWRUL>
		<PREFUL>DE</PREFUL>
		<EXWPREIS>36,57</EXWPREIS>
		<PPER>1</PPER>
		<MINEXWPREIS>0,075</MINEXWPREIS>
	</CALC>
</ERGEBNISSE>

Datei 2 (1234567_DE_XC.xml):
<?xml version="1.0" encoding="ISO-8859-1"?>   
<ERGEBNISSE>
	<CALC>
		<MANDANT/>
		<ARTNO>1234567</ARTNO>
		<ORDERNO/>
		<PRAEFERENZ>1</PRAEFERENZ>
		<PRODCOU>DE</PRODCOU>
		<SELLCOU>XC</SELLCOU>
		<DATUM>01.01.2017</DATUM>
		<UHRZEIT>10:50:21</UHRZEIT>
		<AWRUL>DE</AWRUL>
		<PREFUL>DE</PREFUL>
		<EXWPREIS>36,57</EXWPREIS>
		<PPER>1</PPER>
		<MINEXWPREIS>0,075</MINEXWPREIS>
	</CALC>
</ERGEBNISSE>

usw.

Die einzelnen Nodes mir ausgeben zu lassen habe ich hinbekommen.
([xml](Get-Content "Ergebnis_14031-0163.xml")).SelectNodes("//CALC")  

Da ich blutiger Anfänger bin reicht es leider nicht für den Rest. face-smile

G LianenSchwinger

Content-ID: 332334

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

132692
Lösung 132692 16.03.2017 aktualisiert um 18:06:55 Uhr
Goto Top
Z.B. so
$xml = [xml](Get-Content "Ergebnis_14031-0163.xml")  
$xml.SelectNodes("//CALC") | %{  
    $name = $_.Mandant.Artno + "_" + $_.prodcou + "_" + $_.sellcou + ".xml"  
    "<?xml version=`"1.0`" encoding=`"ISO-8859-1`"?><ERGEBNISSE>$($_.outerXML)</ERGEBNISSE>" | set-content $name  
}
p.
LianenSchwinger
LianenSchwinger 16.03.2017 um 16:44:34 Uhr
Goto Top
Hallo pattern,

danke für Dein Script musste nur den Dateistring abändern damit es läuft.

    $name = $_.Mandant.Artno.value + "_" + $_.prodcou.value + "_" + $_.sellcou.value + ".xml"   

in

    $name = $_.ARTNO + "_" + $_.PRODCOU + "_" + $_.SELLCOU + ".xml"   


Danke und Gruß
LianenSchwinger