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-Key: 332334

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

Printed on: April 19, 2024 at 23:04 o'clock

Mitglied: 132692
Solution 132692 Mar 16, 2017 updated at 17:06:55 (UTC)
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.
Member: LianenSchwinger
LianenSchwinger Mar 16, 2017 at 15:44:34 (UTC)
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