Batch xml File mit !DOCTYPE properties per Batch bearbeiten

exasu

Newbie
Registriert
Juni 2016
Beiträge
1
Hallo liebe Leute,

da ich noch relativ neu bin in der Programmierung stehe ich aktuell ziemlich auf dem Schlauch :(

Ich möchte eine vorhandene xml datei, welche properties enthält, um einen Eintrag erweitern.
Das klappt soweit auch sehr gut, jedoch habe ich das Problem, dass nach Speicherung der neuen Datei mir der Flag für die
!DOCTYPE properties aus der Datei entfernt wurde :(

Das ganze sieht wie folgt aus:

Ausgangsdatei
Code:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="name">Max</entry>
<entry key="nachname">Mustermann</entry>
</properties>



dort lasse ich folgende Batch drüber laufen um die properties um die Werte Straße und Hausnummer zu ergänzen
Code:
@ECHO off & SETLOCAL enabledelayedexpansion

SET "quell_datei=C:\Users\USERNAME\Desktop\properties_old.xml"
SET "ziel_datei=C:\Users\USERNAME\Desktop\properties.xml"
SET "kopie_datei=C:\Users\USERNAME\Desktop\properties_old.xml"
SET "suchen_nach=</properties>"

SET "strasse=<entry key=Lindenstraße</entry>"
SET "hausnummer=<entry key=128</entry>"


ren C:\Users\USERNAME\Desktop\properties.xml properties_old.xml

REM Quell-Datei zeilenweise auslesen und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO SET "zeile=%%i" & CALL :ersetzen
GOTO :weiter

:ersetzen
REM innerhalb der Variable "zeile"
REM den Inhalt der Variable "suchen_nach" suchen
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen
SET "zeile=!zeile:%suchen_nach%=%strasse% %hausnummer% %suchen_nach%!"

REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
ECHO.!zeile!>>"%ziel_datei%"
GOTO :eof

:weiter
REM weitere Verarbeitung

ECHO Fertig.


Ich suche also die Stelle </properties> wo die Datei endet und ersetze diese durch den Wert des Straßennamen, der Hausnummer und hänge dann </properties> wieder dran.
Vorher lege ich noch eine Sicherheitskopie der bestehenden Datei an.
Ich weiß dass ist nicht die schönste Lösung, aber ich bin aktuell noch zu dumm einfach Zeilen an den gewünschten Stellen einzufügen.


Ergebnis ist folgendes
Code:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<//java.sun.com/dtd/properties.dtd">
<properties>
<entry key="name">Max</entry>
<entry key="nachname">Mustermann</entry>
<entry key="strasse">Lindenstraße</entry> <entry key="hausnummer">122</entry> </properties>

Die Datei wurde also erfolgreich durch meine Werte ergänzt.

Problem

ich verstehe einfach nichts, weshalb er mir aus der Zeile
Code:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

folgende macht
Code:
<//java.sun.com/dtd/properties.dtd">



Ich verzweifle hier schon.
Problem ist, dass ein vorhandenes Programm ohne diesen Wert die Daten nicht einlesen kann :(

Weiß da evtl jemand Rat und kann weiterhelfen?

Grüße
 
Hi,

dein Parser verrschluckt sich am Ausrufezeichen in !DOCTYPE.
mit enabledelayedexpansion wird das ! ja zu einer markierrung für eine variable, und da stolpert die Batch dann drüber.
 
Hi alle,

FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO SET zeile=%%i& CALL :ersetzen !zeile!

Okay ich verstehe das. Kleine Änderung vorgenommen und es sieht so aus.

FOR /f "delims=" %%a IN ('FINDSTR . "%quell_datei%"') DO (
SET "line=%%a"
ECHO %line%
)

Result = script break

Es jetzt nicht die Endergebnis die ich suche nur ich Bauer das gesamte script block für block auf.

Was übersehe ich warum es nicht funktioniert?
 
Zurück
Oben