XML Join mit Powershell - speedup?
Hi,
ich muss zwei Tabellen in XML Form mit einer 1:n-Verbindung verknüpfen. (d.h. es geht nicht darum zwei XML Dateien zusammenzufügen)
Mit Powershell konnte ich das soweit umsetzen. Ich geh alle Nodes der größeren XML Datei durch und suche jedesmal in der kleineren den entsprechenden Node.
Die Performance ist ok... 150k Nodes in 15min
Ein Ansatz wäre XmlReader statt XmlDocument zu nutzen da hier ein Index erstellt werden kann. Aber das scheint deutlich aufwendiger zu werden als mit XmlDocument.
Gibt es auch mit XmlDocument einen schnelleren Weg, um einen Node mit bestimmtem ChildNode zu finden?
sg Dirm
ich muss zwei Tabellen in XML Form mit einer 1:n-Verbindung verknüpfen. (d.h. es geht nicht darum zwei XML Dateien zusammenzufügen)
Mit Powershell konnte ich das soweit umsetzen. Ich geh alle Nodes der größeren XML Datei durch und suche jedesmal in der kleineren den entsprechenden Node.
Die Performance ist ok... 150k Nodes in 15min
Ein Ansatz wäre XmlReader statt XmlDocument zu nutzen da hier ein Index erstellt werden kann. Aber das scheint deutlich aufwendiger zu werden als mit XmlDocument.
Gibt es auch mit XmlDocument einen schnelleren Weg, um einen Node mit bestimmtem ChildNode zu finden?
<root>
<node>
<id>
<detail1>
<detail2>
<node>
...
#$ID-node, tag Name des Nodes mit der entprechenden ID.
#xmlsrc, Info
#xmldst, hier sind viele Nodes mit einem ID Feld über das der entsprechende Eintrag aus xmlsrcgeuscht werden soll
foreach ($node in $xmldst.SelectNodes(./root/node)) {
# ID in dest
$search= $node.SelectSingleNode(./id).InnerText
# search id in source file
$nodesrc = $xmlsrc.SelectSingleNode(./rootsrc/node/[./id = $search]) # diese Zeile optimieren?
#alle ChildNodes des gefunden Nodes in XMLdest kopieren
...
sg Dirm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 282497
Url: https://administrator.de/forum/xml-join-mit-powershell-speedup-282497.html
Ausgedruckt am: 02.04.2025 um 03:04 Uhr
4 Kommentare
Neuester Kommentar

Moin,
schon mal mit diesem XPath probiert ?
Gruß grexit
schon mal mit diesem XPath probiert ?
"./rootsrc/node/id[.= '$search']"

Moin,
lade die XML doch in ein In-Memory-Database (DataTable-Objekt), filtere sie und gebe sie wieder aus.
https://msdn.microsoft.com/de-de/library/fs0z9zxd(v=vs.110).aspx
Gruß grexit
lade die XML doch in ein In-Memory-Database (DataTable-Objekt), filtere sie und gebe sie wieder aus.
https://msdn.microsoft.com/de-de/library/fs0z9zxd(v=vs.110).aspx
Gruß grexit