XML-Inhalt austauschen
Hallo zusammen
Nachdem ich nun das komplette Internet gefühlt zwei Mal gelesen, aber nicht kapiert habe, versuch ichs nun auf diesem Weg.
Meine Ausgangslage:
Ich kriege täglich mehrere XML's angeliefert welche in Zeile 15 folgenden Inhalt haben " <ProviderId>www.sda-ats.ch</ProviderId>"
In dieser Zeile muss ich den Wert "www.sda-ats.ch" auf "RDO" ändern.
Das Batch soll alle paar Sekunden eine Abfrage starten, falls neue Files angeliefert wurden. Aber das kann ich ja dann über die Aufgabenplanung lösen.
Sprich es geht eigentlich nur um das Austauschen des Inhalts.
Mein Problem:
Ich hab in diesem Forum so viele Lösungsansätze gesehen, dass ich mittlerweile den Wald vor lauter Bäumen nicht mehr sehe.
Vermutlich ist das für eine Klacks, aber ich steh gerade sowas von auf dem Schlauch..
Grüsse vom Bodensee
Nachdem ich nun das komplette Internet gefühlt zwei Mal gelesen, aber nicht kapiert habe, versuch ichs nun auf diesem Weg.
Meine Ausgangslage:
Ich kriege täglich mehrere XML's angeliefert welche in Zeile 15 folgenden Inhalt haben " <ProviderId>www.sda-ats.ch</ProviderId>"
In dieser Zeile muss ich den Wert "www.sda-ats.ch" auf "RDO" ändern.
Das Batch soll alle paar Sekunden eine Abfrage starten, falls neue Files angeliefert wurden. Aber das kann ich ja dann über die Aufgabenplanung lösen.
Sprich es geht eigentlich nur um das Austauschen des Inhalts.
Mein Problem:
Ich hab in diesem Forum so viele Lösungsansätze gesehen, dass ich mittlerweile den Wald vor lauter Bäumen nicht mehr sehe.
Vermutlich ist das für eine Klacks, aber ich steh gerade sowas von auf dem Schlauch..
Grüsse vom Bodensee
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 360458
Url: https://administrator.de/contentid/360458
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
10 Kommentare
Neuester Kommentar
Bitte gesamte XML posten, zumindest aber die ersten Zeilen bis zur gewünschten.
Hier als Powershell:
$xmlpath = 'C:\data.xml'
$xml = [xml](gc $xmlpath)
$xml.SelectSingleNode("/NewsML/NewsItem[1]/Identification/NewsIdentifier/ProviderId").'#text' = 'RDO'
$xml.Save($xmlpath)
Du verwendest eine zu alte Powershell. Wurde hier einwandfrei getestet!
Wenn du eine ältere Powershell hast kannst du es auch so machen:
Oder hier noch die Variante via VBS falls dir Powershell nicht liegt...
$xmlpath = 'C:\data.xml'
$xml = New-Object XML
$xml.XmlResolver = $null
$xml.Load($xmlpath)
$xml.SelectSingleNode("/NewsML/NewsItem[1]/Identification/NewsIdentifier/ProviderId").'#text' = 'RDO'
$xml.Save($xmlpath)
Oder hier noch die Variante via VBS falls dir Powershell nicht liegt...
Const PATH = "C:\data.xml"
Set xml = CreateObject("MSXML2.DomDocument.6.0")
xml.resolveExternals = False
xml.setProperty "ProhibitDTD",False
xml.validateOnParse = False
xml.async = False
xml.load(PATH)
If xml.parseError.errorCode <> 0 Then
MsgBox xml.parseError.reason & vbNewline & "Line: " & xml.parseError.line & "# Position: " & xml.parseError.linepos
End If
Set node = xml.selectSingleNode("/NewsML/NewsItem[1]/Identification/NewsIdentifier/ProviderId")
If Not node Is Nothing Then
node.text = "RDO"
xml.save PATH
End If
Warum nicht gleich ...Mit Get-ChildItem die Dateien auflisten und dann eine Foreach-Schleife drum pappen.
gci 'c:\*.xml' -File | %{
$xml = New-Object XML
$xml.XmlResolver = $null
$xml.Load($_.Fullname)
$xml.SelectSingleNode("/NewsML/NewsItem[1]/Identification/NewsIdentifier/ProviderId").'#text' = 'RDO'
$xml.Save($_.Fullname)
}