Undefinierte XML mit verändertem Content mit Batch auslesen
Hallo Community,
ich möchte eine Batch erstellen, die mir die mir meine Aufgaben erleichtert.
Dazu muss ich eine bzw. mehrer XML Dateien auslesen...
Dazu gibt es immer eine Index.xml die mir die Verweise auf die nächsten benötigten xml liefert
1. Ich kenne den Namen der XML (Index.xml)
das benötigte steht immer in der 2. Zeile
<IndexFile index="ordner:andereXML.zip" version="4.10.0" />
und ich möchte nur andereXML.zip oder ordner:andereXML.zip in eine neue .txt file schreiben
2. Der Name der Xml entspricht dem was ich gerade aus der Index.xml geholt habe (andereXML.zip)
das benötigte steht hier immer in der 8. Zeile
<FileName val="ordner2:file.zip" />
und ich benötige das zwischen den ", also ordner2:file.zip
Ich würde gerne sagen wie weit ich schon bin, aber leider habe ich bisher nicht gefunden, wie man mit batch etwas aus einer xml auslesen kann....
Und bei "Java ist auch eine Insel" bin ich erst bei Kapitel 3
Bin für jede erdenkliche Hilfe dankbar
greetz
ich möchte eine Batch erstellen, die mir die mir meine Aufgaben erleichtert.
Dazu muss ich eine bzw. mehrer XML Dateien auslesen...
Dazu gibt es immer eine Index.xml die mir die Verweise auf die nächsten benötigten xml liefert
1. Ich kenne den Namen der XML (Index.xml)
das benötigte steht immer in der 2. Zeile
<IndexFile index="ordner:andereXML.zip" version="4.10.0" />
und ich möchte nur andereXML.zip oder ordner:andereXML.zip in eine neue .txt file schreiben
2. Der Name der Xml entspricht dem was ich gerade aus der Index.xml geholt habe (andereXML.zip)
das benötigte steht hier immer in der 8. Zeile
<FileName val="ordner2:file.zip" />
und ich benötige das zwischen den ", also ordner2:file.zip
Ich würde gerne sagen wie weit ich schon bin, aber leider habe ich bisher nicht gefunden, wie man mit batch etwas aus einer xml auslesen kann....
Und bei "Java ist auch eine Insel" bin ich erst bei Kapitel 3
Bin für jede erdenkliche Hilfe dankbar
greetz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 249472
Url: https://administrator.de/contentid/249472
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo pascallantzsch, willkommen im Forum.
Batch ist grundsätzlich ungeeignet um XML zu verarbeiten, weil
Es ist also immer ein Lotteriespiel. Egal ...
Dein erstes Problemchen lässt sich (ungetestet) evtl. so lösen:
Deinen Punkt 2 verstehe ich allerdings nicht. Eine ZIP Datei ist kein XML und enthält binären Inhalt. Wo willst du da eine Zeile 8 und einem Plaintext Inhalt herholen?
Grüße
rubberman
Batch ist grundsätzlich ungeeignet um XML zu verarbeiten, weil
- XML in den unterschiedlichsten Zeichensätzen vorliegen kann
- XML Zeilenumbrüche und Leerzeichen zwischen Knoten ignoriert (der gesamte Inhalt könnte theoretisch in einer Zeile stehen und wäre trotzdem valide)
- Der Aufbau von XML sich an Knotenobjekten, Werten, Eigenschaften, CDATA Objekten etc. orientiert, Batch aber stupide zeilenweise abarbeitet.
Es ist also immer ein Lotteriespiel. Egal ...
Dein erstes Problemchen lässt sich (ungetestet) evtl. so lösen:
@echo off &setlocal
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do (
if not defined filename for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename=%%j"
setlocal EnableDelayedExpansion
>"neue.txt" echo !filename!
endlocal
)
)
Deinen Punkt 2 verstehe ich allerdings nicht. Eine ZIP Datei ist kein XML und enthält binären Inhalt. Wo willst du da eine Zeile 8 und einem Plaintext Inhalt herholen?
Grüße
rubberman
winrar
derzeit nutze ich für diesen schritt aber den jitbit macro Recorder
Von Macrorecordern habe ich keinen Schimmer. Die winrar Zeile sollte so auch nicht funktionieren, da der Pfad Leerzeichen enthält. START (ohne /WAIT) ist auch kontraproduktiv, da asynchron gearbeitet wird. Teste:derzeit nutze ich für diesen schritt aber den jitbit macro Recorder
start "" /wait "C:\Program Files\WinRAR\WinRAR.exe" x C:\Temp\macro\Index.zip *.* C:\Temp\macro\
kann ich das noch so verändern, dass er vor dem, was er aus der xml hat eine http adresse hinzufügt?
Kann man. Schreibe sie einfach vor !filename!
in die ECHO Ausgabe. Falls das aber bedeutet, dass du die Datei erst downloaden musst, ist das noch mal was ganz anderes.Es macht wenig Sinn wenn du häppchenweise mit deinen Anforderungen kommst ...
Grüße
rubberman
soll ja nicht so rüber kommen, als würde ich mich hier anmelden und mir mein programm quasi schreiben lassen
Das finde ich völlig in Ordnung, führt aber zu Verwirrungen.So was wie ...
1. ...
2. ...
3. ...
4. ...
Wobei ich für 2. und 3. bereits folgende Lösungen habe:
...
... würde ungemein helfen (ggf. auch Leuten mit ähnlichen Problemen).2. ...
3. ...
4. ...
Wobei ich für 2. und 3. bereits folgende Lösungen habe:
...
@echo off &setlocal
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do (
if not defined filename1 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename1=%%j"
set "basename1=%%~nj"
setlocal EnableDelayedExpansion
>"neue1.txt" echo http://meineSeite.de/!filename1!
endlocal
)
)
:: download, winrar etc.
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "C:\Temp\macro\%basename1%.xml"') do (
if not defined filename2 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename2=%%j"
set "basename2=%%~nj"
setlocal EnableDelayedExpansion
>"neue2.txt" echo !filename2!
endlocal
)
)
:: Testausgabe
echo "%basename1%"
echo "%basename2%
pause
Grüße
rubberman
EDIT %basename% zu %basename1% in Zeile 14
Das kannst du abkürzen.
Je nachdem, was du tatsächlich benötigst, kannst du ggf. noch weiter einkürzen.
Grüße
rubberman
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename2 (
set "property2=%%i"
for /f "tokens=1,2 delims=:" %%j in ("%%i") do (
set "folder2=%%j"
set "filename2=%%k"
set "basename2=%%~nk"
REM * Für den Test auskommentiert: *
REM setlocal EnableDelayedExpansion
REM >"neue2.txt" echo !filename2!
REM endlocal
)
)
)
echo "%property2%"
echo "%folder2%"
echo "%filename2%"
echo "%basename2%"
Grüße
rubberman
Batch ist grundsätzlich ungeeignet um XML zu verarbeiten, weil
Hey,
@rubberman grundsätzlich hast du natürlich recht, aber... häufig kann xml ganz gut gebatcht werden. Die Struktur muss exakt eingehalten werden (wie immer bei Batch), 1-Byte-Zeichencodierung (ANSI), zeilenorientierte Fragestellung. Dann geht sogar Regex, obwohl das ja quasi verboten ist. Manchmal helfen die xmlStarlet Tools weiter.
Gruss, Endoro
Hi Endoro.
Grüße
rubberman
Zitat von @Endoro:
@rubberman grundsätzlich hast du natürlich recht, aber... häufig kann xml ganz gut gebatcht werden. Die Struktur muss exakt eingehalten werden (wie immer bei Batch), 1-Byte-Zeichencodierung (ANSI), zeilenorientierte Fragestellung.
Joa, wenn oben nicht etwas wie "immer in der X. Zeile" gestanden hätte, hätte ich auch nicht mit Batch gestartet, sondern (wie üblich) gleich auf das XML DOM verwiesen. Für/gegen unterschiedliche Zeichensätze hilft TYPE auch schon mal aus dem gröbsten heraus.@rubberman grundsätzlich hast du natürlich recht, aber... häufig kann xml ganz gut gebatcht werden. Die Struktur muss exakt eingehalten werden (wie immer bei Batch), 1-Byte-Zeichencodierung (ANSI), zeilenorientierte Fragestellung.
Dann geht sogar Regex, obwohl das ja quasi verboten ist.
LOL That would have been a link for the "Humor" forum as well Manchmal helfen die xmlStarlet Tools weiter.
Kannte ich noch nicht. Danke! Persönlich halte ich es dann aber doch lieber mit dem WSH (weil es ohne 3rd Party Tools auskommt).Grüße
rubberman