Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst BATCH Element aus XML-File auslesen

Mitglied: pappkamerad

pappkamerad (Level 1) - Jetzt verbinden

18.05.2016 um 00:26 Uhr, 1753 Aufrufe, 9 Kommentare

Hallo liebe Admins,

ich habe schon öfter bei euch vorbeigeschaut und ein immer eine Lösung für meine Problemchen gefunden. Nun stehe ich aber vor einer Frage, die ich mit meinen Wissen und den Denkanstössen aus dem Netz und von hier leider nicht lösen kann.

Ich möchte aus einem XML-File ein Element (eine URL) auslesen. Diese steht an einer bestimmten Stelle, die sich eventuell ändert (kann ich noch nicht genau sagen).

Bei einem anderen Projekt konnte ich mit diesem Code

01.
for /f "delims== tokens=2"  %%b in ('find "enclosure url=" %file%') do echo %%b>url.txt
den Wert auslesen.

Aber beim jetzigen Projekt steht der gesamte Inhalt der XML in einer Zeile

01.
<?xml version="1.0" encoding="utf-8" ?><images><image><startdate>20160517</startdate><fullstartdate>201605170000</fullstartdate><enddate>20160518</enddate><url>http://192.168.1.25/index.html</url><urlMain>http://192.168.1.25/main.html</urlMain><drk>1</drk><top>1</top><bot>1</bot><hotspots></hotspots><messages></messages></image><tooltips><loadMessage></loadMessage></tooltips></images>
01.
for /f "tokens=2 delims=<>" %%b in ('findstr "<urlMain>" en.xml') do echo %%b>url.txt
liefert mit somit leider nicht die URL nach <urlMain> sondern den Text zwischen den 2. <>, also "images". Ich könnte natürlich abzählen und den Token-Wert erhöhen, aber wenn sich die Posistion von urlMain ändert, fällt das ganz auf die Nase. Wie kann ich den Teilstring zwischen <urlMain> und </urlMain> auslesen?

Für Tipps wäre ich sehr dankbar.

Gruß
pappkamerad
Mitglied: rubberman
18.05.2016 um 01:08 Uhr
Hallo pappkamerad.

Dein Problem ist eines der Gründe, warum man XML nicht mit Batch verwurstet. Dafür gibt's das Document Object Model (DOM). Eine Batch-JScript Kombination würde sicher funktionieren.

*.bat
01.
@if (@a)==(@b) @end /*
02.

03.
@echo off &setlocal
04.

05.
for /f "delims=" %%i in (
06.
  ' cscript //nologo //e:jscript "%~fs0" "test.xml" "images/image/urlMain" '
07.
) do echo %%i
08.
pause
09.

10.
exit /b
11.

12.
*/
13.
var oXmlDoc = new ActiveXObject('Microsoft.XMLDOM');
14.
oXmlDoc.async = false;
15.
oXmlDoc.load(WScript.Arguments(0));
16.
WScript.Echo(oXmlDoc.selectSingleNode(WScript.Arguments(1)).text);
Grüße
rubberman
Bitte warten ..
Mitglied: beidermachtvongreyscull
18.05.2016 um 08:23 Uhr
Ginge vielleicht auch ein Commandline-Parser?
https://sourceforge.net/projects/xmlstar/files/

Vielleicht vereinfacht das die Lösung.
Angeblich kannst Du mit diesem Tool XML-Dateien validieren, abfragen, editieren und transformieren.

Ich habe es aber jetzt nicht getestet.
Bitte warten ..
Mitglied: colinardo
18.05.2016, aktualisiert um 08:35 Uhr
Oder eine andere Variante, ebenfalls in. einer Batch ausführbar:
01.
Powershell -Executionpolicy Bypass -command "([xml](gc 'c:\en.xml')).SelectSingleNode('//urlMain').innerText"
Das Konstrukt lässt sich ja dann auch direkt in eine FOR-Schleife übernehmen.

Grüße Uwe
Bitte warten ..
Mitglied: pappkamerad
18.05.2016 um 08:58 Uhr
Hallo und danke schon einmal für die Ansätze...

@rubberman:
Leider wirft das Script ein Kompilierungsfehler aus
01.
2.bat(1, 5) Kompilierungsfehler in Microsoft JScript: ';' erwartet
Da ich mich mit JScript nicht auskennt, kann ich den Fehler nicht beheben.

@beidermachtvongreyscull:
Ich werde mir das Tool mal anschauen, wenn alle Stricke reißen. Aber eigentlich sollte diese kleine Aufgabe doch auch ohne extra Tool lösbar sein. Hoffe ich zumindest.

@colinardo:
Ahh ein Einzeiler. Wäre klasse, wenn das funktioniert. Aber wie setze ich das in einer *.bat ein? Die Zeile liefert mir leider kein Ergebnis bzw. keine Rückmeldung? Gehe ich richtig in der Annahme, dass 'c:\en.xml' der komplette Pfad zu der xml ist?

Ich bitte nochmals um Hilfe.

Grüße
pappakamerad
Bitte warten ..
Mitglied: colinardo
LÖSUNG 18.05.2016, aktualisiert um 09:20 Uhr
Zitat von pappkamerad:
@colinardo:
Ahh ein Einzeiler. Wäre klasse, wenn das funktioniert. Aber wie setze ich das in einer *.bat ein?
Genau so wie es dort steht , deswegen habe ich es ja so verpackt.

Wenn du das Ergebnis in einer Variablen brauchst, packst du das ganze in eine FOR-Schleife:
01.
set "xmlpath=C:\en.xml"
02.
for /f "delims=" %%a in ('powershell -Executionpolicy ByPass -command "([xml](gc '%xmlpath%')).SelectSingleNode('//urlMain').innerText"') do set "result=%%a"
03.
echo %result%
Die Zeile liefert mir leider kein Ergebnis bzw. keine Rückmeldung? Gehe ich richtig in der Annahme, dass 'c:\en.xml' der komplette Pfad zu der xml ist?
Korrekt.
Läuft hier mit deinem XML-Schnippsel einwandfrei. Ansonsten wurde deine Powershell-Executionpolicy vielleicht noch nicht freigeschaltet oder bei dir per Policy das Ausführen von Powershell verboten.

screenshot - Klicke auf das Bild, um es zu vergrößern

Nutzt dein XML-File anders als oben gepostet vielleicht "XML-Namespaces"?

Grüße Uwe
Bitte warten ..
Mitglied: pappkamerad
18.05.2016, aktualisiert um 10:05 Uhr
Zitat von colinardo:
... Ansonsten wurde deine Powershell-Executionpolicy vielleicht noch nicht freigeschaltet ...
Richtig. Stand noch auf "Restricted". Ich habe es auf "Unrestricted" umgestellt.

Leider bekomme ich trotzdem keine Rückmeldung. Weder am PS-Prompt noch aus der Batch heraus.

test - Klicke auf das Bild, um es zu vergrößern

Nutzt dein XML-File anders als oben gepostet vielleicht "XML-Namespaces"?
Nein. Das XML-File ist genau so aufgebaut wie oben zu sehen.

Fehlt da vielleicht noch eine Einstellung?

Grüße
pappkamerad
Bitte warten ..
Mitglied: colinardo
LÖSUNG 18.05.2016, aktualisiert um 10:22 Uhr
Nein da fehlt nichts.

Frage: Ist urlMain exakt richtig wie im XML-FIle geschrieben (Groß und Kleinschreibung ist hier wichtig)

Man kann alternativ auch case-insensitive suchen XPATH lautet dann so:
//*[translate(local-name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='urlmain']
Bitte warten ..
Mitglied: pappkamerad
18.05.2016 um 10:10 Uhr
Vielen Dank Uwe, genau das war es.

Ja, man sollte sowas ja nicht abtippen, sondern kopieren.

Auf jeden Fall vielen Dank für diese schöne knappe Lösung.

Grüße
pappkamerad
Bitte warten ..
Mitglied: colinardo
18.05.2016 um 10:11 Uhr
Keine Ursache

Schöne Woche
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell bestimmtes XML Element entfernen

gelöst Frage von H41mSh1C0RBatch & Shell4 Kommentare

Hi@PS Profi's, ich versuche gerade ein bestimmtes XML Element zu löschen mit dem Attibute name=Test. Hier kommt er mit ...

Batch & Shell

Powershell bestimmtes XML Element auslesen

gelöst Frage von H41mSh1C0RBatch & Shell6 Kommentare

Hi@PS Profi's, Ein Entry ist wiefolgt aufgebaut: Wenn ich nun im Datagrid mir eine Zeile aussuche will ich mir ...

VB for Applications

Per vbscript element aus xml datei löschen

gelöst Frage von aletriVB for Applications4 Kommentare

guten abend an alle nun folgt der gegenzug nämlich <Path>C:\Program Files\Lockheed Martin\Prepar3D v4\ATiLibs\scenery</Path> entfernen! Script löscht die Zeile nicht ...

VB for Applications

Per vbscript neues element an xml datei einfügen

gelöst Frage von aletriVB for Applications1 Kommentar

guten abend an alle das xml file, dass dieser script bearbeitet sieht leer so aus: <?xml version="1.0"?> -<DynPlacement.Document> -<Config> ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

Extended Validation Certificates are (Really, Really) Dead

Information von Dani vor 1 TagVerschlüsselung & Zertifikate

Moin all, sehr interessanter Artikel zu EV SSL/TLS- Zertifikate von Troy Hunt: Gruß, Dani

Humor (lol)
Das IoT wird schlimmer
Erfahrungsbericht von Henere vor 3 TagenHumor (lol)8 Kommentare

Nun auch schon über den WSUS:

Sicherheit

Win10 1809 und höher erlauben nun das Sperren und Whitelisten von bestimmten Geräten

Tipp von DerWoWusste vor 4 TagenSicherheit1 Kommentar

Vor 1809 konnten nur Geräteklassen gesperrt werden, nun können endlich einzelne Device instance IDs gewhitelistet werden (oder andersherum: gesperrt ...

Windows 10

Hands-On: What is new in the Windows 10 November 2019 Update?

Information von DerWoWusste vor 4 TagenWindows 10

Die wenigen (aber zum Teil interessanten) Neuheiten werden in diesem Video sehr schnell erklärt und vorgeführt.

Heiß diskutierte Inhalte
Server
Suche günstigen Server für erste Schritte mit Microsoft Windows Server 2016 + Exchange
gelöst Frage von vodaviServer19 Kommentare

Hallo zusammen, ich bin auf der Suche nach einem preiswerten, aber guten Server. Mir geht es darum, dass ich ...

Schulung & Training
Was sollte man im Helpdesk bzw Service Desk 1st Level wissen
Frage von loubertSchulung & Training18 Kommentare

Hallo zusammen, ich fange demnächst in einem IT-Systemhaus meinen neuen Job im IT-Helpdesk (UHD), 1st Level (für externe Kunden,) ...

Windows XP
Zugriff auf WindowsXP-Freigabe nur per Eingabeaufforderung möglich
Frage von FA-jkaWindows XP11 Kommentare

Hallo, ich installiere gerade in einer VM WindowsXP; um dort eine "antike" Anwendung zu betreiben. Mit dieser werden historische ...

Firewall
Unifi USG - Unterschied Firewall Regel und Portweiterleitung
gelöst Frage von KodaCHFirewall10 Kommentare

Guten Morgen Bei einer Unifi USG habe ich unter "Routing & Firewall" einerseits die Firewall Regeln für WAN IN, ...