schniefnase
Goto Top

Skript zum Ersetzen von bestimmten Zeilen in XML-Datei

Hallo zusammen,

ich habe folgende Frage:

In einer TXT-Datei habe ich eine Liste mit 1.000 UUIDs die wie folgt aussehen: ec9cdfcf7bcc4ad5b973d0001.
Zudem habe ich 1.000 XML-Dateien wo diese UUIDs eingesetzt werden müssen - und das an zwei Stellen.

Einmal hier:
<nachr:ProzessID>4968c13f169f42738a2271be6</nachr:ProzessID>

und einmal hier:
<xf:ID>ec9cdfcf7bcc4ad5b973d0e36</xf:ID>

Ich müsste also ein Skript haben, dass das Verzeichnis mit den XML-Dateien durchläuft und Zeilenweise die UUIDs aus der TXT-Datei holt und an den beiden Stellen ersetzt. Die 1.000 XML-Dateien sind "Klone" - also exakt identisch. Die beiden o.g. IDs sind also immer identisch. Nach dem Vorgang des Ersetzens wären sie es nicht mehr, da dann jede XML an den zwei Stellen eine neue identische ID hat.

Früher hätte ich für so was Mapforce genommen (hab ich aber leider nicht mehr). Ich habe nur Notepad ++ und meine Windows Command Line bzw. Powershell.

Dank euch.

Content-ID: 2278872953

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

1915348599
Lösung 1915348599 25.03.2022 um 12:25:46 Uhr
Goto Top
$guids = gc "d:\guids.txt"  
$cnt = 0
foreach($file in Get-ChildItem "d:\ordner" -File -Filter *.xml){  
    [xml}$xml = Get-Content $file.Fullname
    $xml.GetElementsByTagName('nachr:ProzessID') | %{$_.InnerText = $guids[$cnt]}  
    $xml.GetElementsByTagName('xf:ID') | %{$_.InnerText = $guids[$cnt]}  
    $xml.Save($file.Fullname)
    $cnt++
}
Schniefnase
Schniefnase 28.03.2022 aktualisiert um 11:00:52 Uhr
Goto Top
Zitat von @1915348599:

$guids = gc "d:\guids.txt"  
$cnt = 0
foreach($file in Get-ChildItem "d:\ordner" -File -Filter *.xml){  
    [xml}$xml = Get-Content $file.Fullname
    $xml.GetElementsByTagName('nachr:ProzessID') | %{$_.InnerText = $guids[$cnt]}  
    $xml.GetElementsByTagName('xf:ID') | %{$_.InnerText = $guids[$cnt]}  
    $xml.Save($file.Fullname)
    $cnt++
}

Dank dir. Das ist ein Powershell Skript, richtig?
Wenn ja:
Ich lege es mir in ein PS1 File, passe die beiden Pfade an und lass es laufen via Powershell ISE. Korrekt?