eldorado1
Goto Top

XMLStarlet Anweisung in For Schleife Verwenden

Hallo,

ich würde gerne die Ausgabe die ich mittels xmlstarlet mit einer Batch Datei erzeuge in einer Variable speicher damit ich diese nachher
mit anderen Werten vergleich kann.

for /f %%i in ('xml sel -T -t -m %baum% -v "Wert" %quelle%') do Set test=%%i  

Das liefert mir das was ich mir vorstelle
In der Variable test steht der 8 stellige Inhalt.

Allerdings hat die xml Datei einen Namespace und wenn ich diesen in der xmlstarlet Anweisung verwende habe ich ein = Zeichen
welches nicht erlaubt ist oder?
Der folgende Aufruf Funktioniert dann auch nicht mehr!

for /f %%i in ('xml sel -N ns="namespace" -T -t -m %baum% -v "ns:Wert" %quelle%') do Set test=%%i  

Vielleicht kann mir ja jemand weiter helfen.


Vielen Dank

Gruß eldorado

Content-ID: 280443

Url: https://administrator.de/forum/xmlstarlet-anweisung-in-for-schleife-verwenden-280443.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

114757
Lösung 114757 17.08.2015 aktualisiert um 16:11:11 Uhr
Goto Top
Moin,
bestimmte Sonderzeichen wie das Gleichheitszeichen etc. unter anderem auch (| < > & ( ) ) musst du in der FOR Anweisung so "escapen"
Also dem Sonderzeichen ein ^ voranstellen
^=
Gruß jodel32
eldorado1
eldorado1 17.08.2015, aktualisiert am 18.08.2015 um 13:21:46 Uhr
Goto Top
Hallo jodel32,

danke für deine schnelle Antwort
Hat super funktioniert face-smile

habe aber noch etwas :|

mein %baum% sie jetzt so aus
set baum=/ns:a/ns:b/ns:c/ns:d

jetzt würde ich gerne noch ein Attribut, wie folgt, mit einbauen.

set baum=/ns:a/ns:b[@atr^="ab_1"]/ns:c/ns:d  

aber das funktioniert leider auch nicht face-sad
114757
114757 17.08.2015 aktualisiert um 16:20:50 Uhr
Goto Top
die eckigen Klammern und das @ würde ich auch mal escapen...die Liste der Sonderzeichen oben war nicht komplett ...
in nicht nur eines der Sonderzeichen escapen sondern alle Vorkommen
eldorado1
eldorado1 17.08.2015 um 16:23:50 Uhr
Goto Top
Habe ich mir gedacht und schon ausprobiert - leider ohne Erfolg
114757
114757 17.08.2015 aktualisiert um 16:37:33 Uhr
Goto Top
Ach so habe dein Posting da gerade missinterpretiert...dachte du gibst das direkt in den For Loop ein..
Nee die Sonderzeichen musst du nur escapen wenn sie direkt im Körper des For-Loops angegeben werden ...
Probiers mal so
set "baum=/ns:a/ns:b[@atr='ab_1']/ns:c/ns:d"
und dann die Baum-Variable im For-Loop verwenden. Kanns gerade nicht testen, bin auf dem Phone... sollte aber laufen
eldorado1
eldorado1 17.08.2015 um 16:37:48 Uhr
Goto Top
Kein Problem.

Hat leider auch zu keiner Ausgabe geführt.

auch wenn ich die Struktur direkt - also anstelle von %baum% - eingebe, erhalte ich keine Ausgabe.
114757
114757 17.08.2015 aktualisiert um 17:23:52 Uhr
Goto Top
Ich kenne das XML-Tool jetzt nicht, aber ich vermute die Namespace-Angabe ist hier eventuell nicht deklariert.

Wenn man wüsste wie dein XML-Tree aussieht und was du dort filtern willst könnte man dir eventuell weiterhelfen.


-edit- habe das hier gerade mal ausprobiert und funktioniert hier einwandfrei, da muss deine XPATH Query irgendwie keine Ausgabe erzeugen ...

Mein Test hatte folgende XML Datei:
<?xml version="1.0" encoding="utf-8"?>  
<root xmlns:ns="http://test.local">  
	<ns:test name="testattribut">  
		<ns:mynode>Test 1</ns:mynode>
		<ns:mynode>Test 2</ns:mynode>
	</ns:test>
</root>
und mein dazugehörger Batchcode:
@echo off & setlocal enabledelayedexpansion
set "query=/root/ns:test[@name='testattribut']"  
for /f "tokens=* delims=" %%a in ('xml sel -t -m "%query%" -v "ns:mynode" "C:\test.xml"') DO @(  
    set "wert=%%a"  
    echo !wert!
)
eldorado1
eldorado1 18.08.2015 aktualisiert um 13:21:13 Uhr
Goto Top
Hallo und nochmal Vielen Dank für deine Mühe

habe es auch hinbekommen. Meine Lösung:
set baum="/ns:a/ns:b[@atr='ab_1']/ns:c/ns:d"  

for /f %%i in ('xml sel -N ns^="namespace" -T -t -m %baum% -v "ns:Wert" -n %quelle%') do (...)  
Habe dann immer gleich %%i für die abfrage genommen in der Schleife.
Wenn ich innerhalb der Schleife %%i einer Variable zugewiesen habe, hat diese mir komischer weise immer einen falschen Wert zugewiesen der nicht
identisch mit %%i war.

Also deine Lösung war richtig musste nur die - " - bei - baum="/... - nach dem - = - Zeichen setzen und nicht davor - "baum=/... -

Hätte gleich noch eine Frage :|

Kann ich in einer If Anweisung das genau so machen??
Also so:

if ('xml sel...')== Ausdruck?

Gruß eldorado

Ps: Wie kann ich meine Quellcode als solchen formatieren? Dann werden die Beiträge besser lesbar
114757
114757 18.08.2015 aktualisiert um 10:17:55 Uhr
Goto Top
Zitat von @eldorado1:

Also deine Lösung war richtig musste nur die - " - bei - baum="/... - nach dem - = - Zeichen setzen und nicht davor
- "baum=/... -
Wenn du im Schleifenkörper um die Variable "%Baum%" die Anführungszeichen gesetzt hättest wäre es auf das selbe herausgekommen face-wink
Hätte gleich noch eine Frage :|

Kann ich in einer If Anweisung das genau so machen??
Also so:

if ('xml sel...')== Ausdruck?
Nein, speichere mit der For-Schleife deinen Wert in einer Variablen und vergleiche dann die Variablen.
Ps: Wie kann ich meine Quellcode als solchen formatieren? Dann werden die Beiträge besser lesbar
Guckst du in die FAQ Formatierungen in den Beiträgen

Gruß jodel
eldorado1
eldorado1 18.08.2015 um 13:23:21 Uhr
Goto Top
Danke face-smile

Habe es auch nochmal mit einer For-Schleife gemacht ;)

Gruß eldorado