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-Key: 557125

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

Printed on: April 25, 2024 at 06:04 o'clock

Member: laster
laster Mar 12, 2020 at 09:09:42 (UTC)
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
Mitglied: 143127
143127 Mar 12, 2020 updated at 09:20:57 (UTC)
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.
Member: Zini123
Zini123 Mar 12, 2020 at 09:27:59 (UTC)
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).
Member: Zini123
Zini123 Mar 12, 2020 at 09:29:50 (UTC)
Goto Top
Vielen Dank für die Hilfe! Wie funktioniert das mit dem Maskieren? Schreibe ich einfach find /v "^<^DUM^>^" ?
Mitglied: 143127
Solution 143127 Mar 12, 2020 updated at 09:41:23 (UTC)
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)
}
Member: laster
laster Mar 12, 2020 at 09:31:52 (UTC)
Goto Top
in der batch:
find /v "^<DUM^>"  
vG
LS
Member: Zini123
Zini123 Mar 12, 2020 at 09:39:33 (UTC)
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!
Member: Zini123
Zini123 Mar 12, 2020 at 09:40:12 (UTC)
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.
Mitglied: 143127
143127 Mar 12, 2020 updated at 09:57:13 (UTC)
Goto Top
Bidde, und bitte als gelöst markieren nicht vergessen.