zini123
Goto Top

Tags aus xml-Dateien automatisch löschen

Hallo,

ich habe auf "C:\Users\zini\Desktop\Export" immer wieder mehrere xml-Dateien, aus denen ich "<DUM>" und "</DUM>" löschen möchte. "<DUM>" steht immer (alleine) in Zeile 3, </DUM> immer in der letzten Zeile, wobei die verschiedenen xml-Dateien nicht immer gleich viele Zeilen haben.

Hier ein Ausschnitt:
<?xml version="1.0" encoding="UTF-8"?>
<!-- exportiert aus Datenbank: DUM>
<DUM>
<record>
<inventory_number>01-0212</inventory_number>
[…]
</record>
</DUM>

Gibt es die Möglichkeit, das irgendwie automatisch zu lösen, z.B. per Batch? Vielleicht kann mir ja jemand helfen. Schon jetzt vielen Dank!

Content-ID: 557125

Url: https://administrator.de/forum/tags-aus-xml-dateien-automatisch-loeschen-557125.html

Ausgedruckt am: 11.04.2025 um 20:04 Uhr

laster
laster 12.03.2020 um 10:09:42 Uhr
Goto Top
Hallo,

ganz grob:
type datei.xml | find /v "<DUM>" | find /v "</DUM>" > neue_datei.xml  
In einer BAtch musst Du noch die Zeichen < > maskieren (^<) ...

vG
LS
143127
143127 12.03.2020 aktualisiert um 10:20:57 Uhr
Goto Top
Das einzige Document-Element zu löschen ist keine gute Idee wenn darin mehrere Elemente mit gleichem Namen sind, dann ist das XML nämlich nicht mehr valide und es kommt zu diesem Fehler...
Error: "Das Dokument verfügt bereits über einen 'DocumentElement'-Knoten."  
Und XML-Dateien sollte man immer durch einen Parser jagen und nicht rein per Text bearbeiten führt schneller zu Fehlern als du denkst.
Zini123
Zini123 12.03.2020 um 10:27:59 Uhr
Goto Top
Vielen Dank für den Hinweis! Da jedes "Objekt" eine eigene Datei bekommt, sollte das kein Problem sein.
Im Prinzip ist <record> </record> die "Klammer" um die Informationen, die ich für eine externe Datenbank bereitstellen muss (für die Migration der Daten muss die DUM-Ebene raus).
Zini123
Zini123 12.03.2020 um 10:29:50 Uhr
Goto Top
Vielen Dank für die Hilfe! Wie funktioniert das mit dem Maskieren? Schreibe ich einfach find /v "^<^DUM^>^" ?
143127
Lösung 143127 12.03.2020 aktualisiert um 10:41:23 Uhr
Goto Top
Dann nimm gleich die Powershell, dann kannst du auch sicher sein das die Datei hinter auch noch valide ist (Wie gesagt XML nur mit Parser!)
gci 'C:\Users\zini\Desktop\Export' -File -Filter *.xml | %{  
    $xml = New-Object XML
    $xml.Load($_.Fullname)
    $node = $xml.SelectSingleNode("/DUM/*")  
    $xml.RemoveChild($xml.DocumentElement) | out-null
    $xml.AppendChild($node) | out-null
    $xml.Save($_.Fullname)
}
laster
laster 12.03.2020 um 10:31:52 Uhr
Goto Top
in der batch:
find /v "^<DUM^>"  
vG
LS
Zini123
Zini123 12.03.2020 um 10:39:33 Uhr
Goto Top
Zitat von @143127:

Dann nimm gleich die Powershell, dann kannst du auch sicher sein das die Datei hinter auch noch valide ist (Wie gesagt XML nur mit Parser!)
> gci 'C:\Users\zini\Desktop\Export' -File -Filter *.xml | %{  
>     $xml = New-Object XML
>     $xml.Load($_.Fullname)
>     $node = $xml.SelectSingleNode("/DUM/*[1]")  
>     $xml.RemoveChild($xml.DocumentElement) | out-null
>     $xml.AppendChild($node) | out-null
>     $xml.Save($_.Fullname)
> }
> 

Richtig cool, es hat genau das gemacht, was ich wollte! Vielen, vielen Dank!
Zini123
Zini123 12.03.2020 um 10:40:12 Uhr
Goto Top
Zitat von @laster:

in der batch:
find /v "^<DUM^>"  
vG
LS

Vielen Dank für die Hilfe! Ich hab's jetzt mit der Powershell gelöst, das hat super funktioniert.
143127
143127 12.03.2020 aktualisiert um 10:57:13 Uhr
Goto Top
Bidde, und bitte als gelöst markieren nicht vergessen.