haberl92
Goto Top

Zahlen aus XML auslesen und speichern lassen

Hallo zusammen,

ich bin noch ein ziemlicher PowerShell-Neuling.
Ich bräuchte Hilfe bezüglich eines Scripts, welche mir aus einer XML bestimmte Zahlen ausliest und als "text.txt" speichert.

Anbei habe ich ein Bild angefügt, welches so eine XML-Datei zeigt.
Nun müsste die Zahl bei "Page ID="61" (also die 132150322340) ausgelesen werden und in eine Text-Datei geschrieben werden.
In einer XML können mehrere oder auch keine Zahlen vorkommen.
Der Unterschied zu den anderen Zahlen ist nur das Attribut "Paginator ID"
Bei den Zahlen die ich brauche, ist nur die ID 9000 und bei den anderen sind es zwei ID`s: 9000 und 5100.

Wenn es noch möglich sein sollte, wäre es gut, wenn die entstandene Text-Datei den gleichen Namen wie die XML-Datei bekommen würde.
(falls nötig, wäre der Name auch innerhalb der XML als Attribut hinterlegt.


Vielen Dank im Vorraus für die Hilfe

MfG

Content-ID: 1548238294

Url: https://administrator.de/forum/zahlen-aus-xml-auslesen-und-speichern-lassen-1548238294.html

Ausgedruckt am: 22.12.2024 um 21:12 Uhr

149569
149569 24.11.2021 aktualisiert um 17:05:46 Uhr
Goto Top
$ordner = "D:\Ordner"  
Get-ChildItem $ordner -File -Filter *.xml -pipelinevariable file | %{
     Select-XML -Path $_.Fullname -XPath "//Attributes/Paginator[@ID='9000']" | %{$_.Node.innerText} | Select -Unique | Set-Content "$ordner\$($file.Basename).txt"  
}
Haberl92
Haberl92 24.11.2021 aktualisiert um 16:48:49 Uhr
Goto Top
Hallo @149569,

Er liest jetzt alle Zahlen aus, auch die mit beiden Attributen
149569
149569 24.11.2021 aktualisiert um 16:53:18 Uhr
Goto Top
Habs oben mal auf Paginator Knoten eingeschränkt die nur die ID 9000 haben dachte die anderen brauchst du auch weil du die fett markiert hast ... Wird aus deiner Beschreibung leider nicht ganz eindeutig was du nun tatsächlich willst. Leider hast du auch nicht den eigentlichen XML-Teil im Klartext gepostet ...
Haberl92
Haberl92 24.11.2021 um 16:53:14 Uhr
Goto Top
Der Unterschied zu den anderen Zahlen ist nur das Attribut "Paginator ID"
Bei den Zahlen die ich brauche, ist nur die ID 9000 und bei den anderen sind es zwei ID`s: 9000 und 5100.

Ich brauche nur die mit dem Attribut ID 9000, alle anderen mit beiden Attributen brauche ich nicht.

Sorry, ist wahrscheinlich ein wenig blöd formuliert
149569
149569 24.11.2021 aktualisiert um 16:54:59 Uhr
Goto Top
S. Anpassung oben einfach nur im XPath String den "OR" Teil weglassen hätte man auch selbst sehen können ...
Haberl92
Haberl92 24.11.2021 um 16:58:46 Uhr
Goto Top
Zitat von @149569:

S. Anpassung oben einfach nur im XPath String den "OR" Teil weglassen hätte man auch selbst sehen können ...

jetzt werden immer noch alle Nummern angezeigt, da die anderen ja auch das Attribut zusätzlich haben.
149569
149569 24.11.2021 aktualisiert um 17:09:08 Uhr
Goto Top
Zitat von @Haberl92:
jetzt werden immer noch alle Nummern angezeigt, da die anderen ja auch das Attribut zusätzlich haben.
Nö, ein Attribut mit dem Namen ID kann niemals zweimal in ein und dem selben Element vorkommen!

Sowas hier
<Paginator ID="5100" ID="9000">  
geht nicht

Bitte poste das XML im Klartext keine GUI-Interpretation! Danke.
Haberl92
Haberl92 24.11.2021 um 17:20:07 Uhr
Goto Top
Einmal ist es Paginator ID und einmal ist es Barcode ID.
Alle Zahlen haben beide Attribute, aber ich brauche nur diejenigen, die nur den Attribut "Paginator ID" haben.


Hier mal ein kurzer Ausschnitt aus der XML. (Gesamt wäre hier viel zu lang)

					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="4" FormType="Form13" Confidence="43.33"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032232_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="1652" Width="1170" Size="76096"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032232_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="1653" Width="1170" Size="5148"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="60">  
					<Front>
						<Attributes>
							<Barcode ID="5100" DataType="string">132150322333</Barcode>  
							<Paginator ID="9000">132150322333</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032233_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2344" Width="1654" Size="86482"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032233_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2345" Width="1654" Size="3244"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="1" FormType="AOK" Confidence="15.22"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032233_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2338" Width="1658" Size="93004"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032233_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2339" Width="1659" Size="3396"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="61">  
					<Front>
						<Attributes>
							<Paginator ID="9000">132150322340</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032234_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2354" Width="1732" Size="94748"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032234_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2355" Width="1732" Size="4652"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="6" FormType="Form14" Confidence="33.08"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032234_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2334" Width="1724" Size="139030"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032234_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2334" Width="1725" Size="14752"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="62">  
					<Front>
						<Attributes>
							<Barcode ID="5100" DataType="string">132150322357</Barcode>  
							<Paginator ID="9000">132150322357</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032235_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2360" Width="1652" Size="90237"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032235_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2360" Width="1653" Size="4576"></Image>  
						</Images>
					</Front>
149569
149569 24.11.2021 aktualisiert um 17:30:27 Uhr
Goto Top
Jupp genau das macht mein Code oben, er nimmt nur die Elemente die Paginator heißen und gleichzeitig das Attribut ID mit dem Wert 9000 besitzen, auf die Barcode-Knoten passt der XPath Filter ja überhaupt nicht, diese können also aus Prinzip gar nicht angezeigt werden...

"Paginator ID"
Nee "ID" ist hier das XML-Attribut im Element mit dm Namen Paginator bitte benutze die richtigen Termini!
Haberl92
Haberl92 24.11.2021 um 17:31:03 Uhr
Goto Top
<Attributes>
							<Barcode ID="5100" DataType="string">132150322357</Barcode>  
							<Paginator ID="9000">132150322357</Paginator>  

wie es aber hier zu sehen ist, haben die Zahlen ja beide Attribute und werden durch deinen Code auch in die Text-Datei geschrieben.
149569
149569 24.11.2021 aktualisiert um 17:33:40 Uhr
Goto Top
Zitat von @Haberl92:

<Attributes>
> 							<Barcode ID="5100" DataType="string">132150322357</Barcode>  
> 							<Paginator ID="9000">132150322357</Paginator>  

wie es aber hier zu sehen ist, haben die Zahlen ja beide Attribute und werden durch deinen Code auch in die Text-Datei geschrieben.
Nein kann aus Prinzip meines Codes nicht sein weil der XPath Filter nur auf den Paginator-Knoten zutrifft, der Barcode-Knoten kann also niemals gematcht werden!!! Kopiere den Code nochmal hast wohl noch eine Version aus dem Cache ...
149569
149569 24.11.2021 aktualisiert um 17:38:45 Uhr
Goto Top
Falls du mir nicht glaubst bitte hier die Online-Demo
https://tio.run/##vVZpb9pAEP2Mf8Vq1YpPtvf0ERkCbRQF9UIJUqMeQi4s4ApsZJY0vX ...
Haberl92
Haberl92 24.11.2021 um 18:04:35 Uhr
Goto Top
ich glaube dir, aber mit dem Code, werden mir immer noch alle Nummern in die Text-Datei geschrieben.

Hier nochmal ein etwas größerer Ausschnitt:
(für die Text-Datei wird der Code bei "Page ID="61"" benötigt)

Wäre es nicht möglich, wenn man jetzt schon alle Nummern hat, dass man diejenigen mit den Attribut "Barcode ID" einfach wieder entfernt und die verbliebenen Nummern dann in die Textdatei schreibt?


<Page ID="59">  
					<Front>
						<Attributes>
							<Barcode ID="5000" DataType="string">000005555550</Barcode>  
							<Barcode ID="5100" DataType="string">000005555550</Barcode>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032232_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="1656" Width="1172" Size="74717"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032232_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="1657" Width="1173" Size="5336"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="4" FormType="Form13" Confidence="43.33"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032232_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="1652" Width="1170" Size="76096"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032232_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="1653" Width="1170" Size="5148"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="60">  
					<Front>
						<Attributes>
							<Barcode ID="5100" DataType="string">132150322333</Barcode>  
							<Paginator ID="9000">132150322333</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032233_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2344" Width="1654" Size="86482"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032233_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2345" Width="1654" Size="3244"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="1" FormType="AOK" Confidence="15.22"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032233_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2338" Width="1658" Size="93004"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032233_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2339" Width="1659" Size="3396"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="61">  
					<Front>
						<Attributes>
							<Paginator ID="9000">132150322340</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032234_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2354" Width="1732" Size="94748"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032234_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2355" Width="1732" Size="4652"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="6" FormType="Form14" Confidence="33.08"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032234_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2334" Width="1724" Size="139030"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032234_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2334" Width="1725" Size="14752"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="62">  
					<Front>
						<Attributes>
							<Barcode ID="5100" DataType="string">132150322357</Barcode>  
							<Paginator ID="9000">132150322357</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032235_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2360" Width="1652" Size="90237"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032235_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2360" Width="1653" Size="4576"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="10" FormType="Form26" Confidence="38.59"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032235_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2338" Width="1660" Size="208889"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032235_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2338" Width="1660" Size="30756"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="63">  
					<Front>
						<Attributes>
							<Barcode ID="5100" DataType="string">132150322364</Barcode>  
							<Paginator ID="9000">132150322364</Paginator>  
						</Attributes>
						<Images>
							<Image ID="0" Path="AZHscan_5_211117_000017_01700\00032236_0.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2346" Width="1654" Size="88601"></Image>  
							<Image ID="1" Path="AZHscan_5_211117_000017_01700\00032236_1.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2346" Width="1654" Size="3384"></Image>  
						</Images>
					</Front>
					<Rear>
						<Attributes>
							<FormReco ID="21" FormType="Form901f" Confidence="15.41"></FormReco>  
						</Attributes>
						<Images>
							<Image ID="2" Path="AZHscan_5_211117_000017_01700\00032236_2.jpg" Date="2021-11-17" Time="21:25:41" ImgType="3" DPI="200" Height="2338" Width="1660" Size="93764"></Image>  
							<Image ID="3" Path="AZHscan_5_211117_000017_01700\00032236_3.tif" Date="2021-11-17" Time="21:25:41" ImgType="2" DPI="200" Height="2338" Width="1660" Size="4104"></Image>  
						</Images>
					</Rear>
				</Page>
				<Page ID="64">  
					<Front>
						<Attributes>
149569
149569 24.11.2021 aktualisiert um 18:24:47 Uhr
Goto Top
Zitat von @Haberl92:

ich glaube dir, aber mit dem Code, werden mir immer noch alle Nummern in die Text-Datei geschrieben.
Nöp hier nicht siehst du ja in der Online-Demo oben ...
Hier nochmal ein etwas größerer Ausschnitt:
(für die Text-Datei wird der Code bei "Page ID="61"" benötigt)
? Du brauchst also nur die Nummer im Element Page also die "61", nicht den Inhalt von dem Knoten Paginator (132150322340)?
Wäre es nicht möglich, wenn man jetzt schon alle Nummern hat, dass man diejenigen mit den Attribut "Barcode ID" einfach wieder entfernt und die verbliebenen Nummern dann in die Textdatei schreibt?
Überflüssig weil es funktioniert, wie gesagt, es kann schon aus Prinzip des xPath Filters nicht sein das diese gematcht werden ! Außerdem sind die Nummern in deinen Beispielen in beiden Knoten sowohl im Barcode als auch im Paginator-Element gleich siehst du ja hoffentlich selbst face-wink. Du verwechselst da wohl was oder beschreibst es nicht zu 100% eindeutig, indem Fall mach doch mal ein IST SOLL Vergleich.
149569
Lösung 149569 24.11.2021 aktualisiert um 18:32:54 Uhr
Goto Top
Mein letzter Versuch das zu interpretieren:
$ordner = "D:\Ordner"  
Get-ChildItem $ordner -File -Filter *.xml -pipelinevariable file | %{
     Select-XML -Path $_.Fullname -XPath "//Paginator[@ID='9000' and count(../Barcode)=0]" | %{$_.Node.innerText} | Set-Content "$ordner\$($file.Basename).txt"  
}
Das übernimmt den Inhalt nur von den Paginator-Knoten mit der ID=9000 und die auf der selben Ebene keinen Barcode Knoten haben, hoffe das ist jetzt das was du willst.
Haberl92
Haberl92 24.11.2021 um 18:34:55 Uhr
Goto Top
Zitat von @149569:

Zitat von @Haberl92:

ich glaube dir, aber mit dem Code, werden mir immer noch alle Nummern in die Text-Datei geschrieben.
Nöp hier nicht siehst du ja in der Online-Demo oben ...

Bei mir kommt es aber so raus, vieleicht brauchst du die ganze XML dafür.

Hier nochmal ein etwas größerer Ausschnitt:
(für die Text-Datei wird der Code bei "Page ID="61"" benötigt)
? Du brauchst also nur die Nummer im Element Page also die "61", nicht den Inhalt von dem Knoten Paginator (132150322340)?

Ich brauche schon den Inhalt, also das stimmt so.

Ich kann leider den ganzen Code nicht senden, da es zu viele Zeichen sind
Haberl92
Haberl92 24.11.2021 um 18:38:57 Uhr
Goto Top
Zitat von @149569:

Mein letzter Versuch das zu interpretieren:
> $ordner = "D:\Ordner"  
> Get-ChildItem $ordner -File -Filter *.xml -pipelinevariable file | %{
>      Select-XML -Path $_.Fullname -XPath "//Paginator[@ID='9000' and count(../Barcode)=0]" | %{$_.Node.innerText} | Set-Content "$ordner\$($file.Basename).txt"  
> }
> 
Das übernimmt den Inhalt nur von den Paginator-Knoten mit der ID=9000 und die auf der selben Ebene keinen Barcode Knoten haben, hoffe das ist jetzt das was du willst.

Der Code funktionert jetzt wunderbar.
Vielen Dank für die Hilfe und die Geduld
Haberl92
Haberl92 02.12.2021 um 16:22:28 Uhr
Goto Top
Hallo nochmal,

jetzt muss ich nochmal nachfragen, was muss ich bei dem Script ändern, dass er mir bei der XML immer den Barcode oder Paginator von Page ID="1" ausgibt?
(Besser den Paginator, weil ja der Barcode wie oben zu sehen ist, nicht immer da ist)

(hat nichts mit den vorherigen Script zu tun, dass läuft jetzt wunderbar)

hier nochmal das Script:
$ordner = "C:\Test"  
Get-ChildItem $ordner -File -Filter *.xml -pipelinevariable file | %{
     Select-XML -Path $_.Fullname -XPath "//Paginator[@ID='9000' and count(../Barcode)=0]" | %{$_.Node.innerText} | Set-Content "$ordner\$($file.Basename).txt"  
}
149569
Lösung 149569 02.12.2021 um 16:37:52 Uhr
Goto Top
"//Page[@ID='1']//Paginator[@ID='9000' and count(../Barcode)=0]"  
Haberl92
Haberl92 02.12.2021 um 16:49:18 Uhr
Goto Top
das funktioniert gut, wenn ich nur eine XML habe.
Aber wenn ich es in einen Ordner teste mit ca. 1500 XML, dann bekomme ich nur 3 Textdateien.
Wieso erstellt er nur 3?
Jede XML hat denselben Aufbau
149569
149569 02.12.2021 aktualisiert um 16:53:48 Uhr
Goto Top
Na den absichtlichen Fehler den ich eingebaut hatte hättest du auch selber sehen können, hatte die ID extra auf 61 gesetzt um zu sehen ob du auch mal dein Oberstübchen anstrengst und nicht nur copy n pastest ... wohl falsch gedacht ... Man sieht es wird mal wieder schnell Freitag 🐟
Haberl92
Haberl92 02.12.2021 um 16:53:46 Uhr
Goto Top
habe den Fehler gefunden...
Da ich jetzt nicht wie oben nach der Zahlenfolge mit NUR dem Paginator suche, musste ich den Code vom ersten Post nehmen, dann hat es funktioniert.

Vielen Dank
Haberl92
Haberl92 02.12.2021 um 16:54:14 Uhr
Goto Top
Den Fehler hab ich gleich schon bemerkt xD
149569
149569 02.12.2021 aktualisiert um 17:25:58 Uhr
Goto Top
Vielleicht zur Abwechslung mal etwas über die XPath-Syntax informieren, damit lässt sich so ziemlich alles in XML Dokumenten adressieren sei es auch noch so komplex.
https://www.w3schools.com/xml/xpath_syntax.asp
Wenn man viel mit XML Dokumenten hantiert ist das Quasi ein Wissens-must have.
Haberl92
Haberl92 02.12.2021 um 17:26:52 Uhr
Goto Top
Vielen Dank für den Tipp.
Ich bin eben bei PowerShell noch Neuling und wenn es um XML geht noch besserer Neuling.
Da kann ich überhaupt nicht sagen, wie Powershell damit umgeht.
Ich mache das meiste mit CMD. Nur bei XML muss es Powershell sein.
149569
149569 02.12.2021 aktualisiert um 17:31:54 Uhr
Goto Top
Zitat von @Haberl92:

Vielen Dank für den Tipp.
Ich bin eben bei PowerShell noch Neuling und wenn es um XML geht noch besserer Neuling.
Da kann ich überhaupt nicht sagen, wie Powershell damit umgeht.
Ich mache das meiste mit CMD. Nur bei XML muss es Powershell sein.

XPath hat an sich nichts mit der Powershell zu tun face-smile, und das hier ist eigentlich der Hauptbestandteil, alles andere drum herum bleibt für die Verarbeitung mittels Schleife gleich.

Für XPath braucht man auch nicht unbedingt Powershell bei XML ist XSLT die wahre Goldgrube, das ist dann bestimmt nochmal den Faktor 50 schneller.