Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Bestimmten Bereich aus XML auslesen und Werte in anderer Reihenfolge ausgeben

Frage Entwicklung Batch & Shell

Mitglied: flusenhirn

flusenhirn (Level 1) - Jetzt verbinden

18.04.2008, aktualisiert 19.04.2008, 5706 Aufrufe, 1 Kommentar

Hallo Leute,
ich hab zwar versucht, mein Problem durch Google, Studienkollegen sowie Try & Error selbst zu lösen... komme irgendwie aber (trotz der echt genialen Hilfen hier) absolut nicht weiter... hab leider bisher auch kaum was mit Batch gemacht!

Ich habe eine XML die gekürzt so aussieht:

<Directory Name="Hauptverzeichnis">
<Directory Name="Unterverzeichnis1">
<File Name="datei1" Size="551118" TTH="12345"/>
<File Name="datei2" Size="524951" TTH="54321"/>
<Directory Name="Unterunterverzeichnis1">
<File Name="datei1" ...
</Directory>
</Directory>
<Directory Name="Unterverzeichnis2">
<Directory Name="Unterunterverzeichnis1">
<File Name="datei1" ...
</Directory>
<Directory Name="Unterunterverzeichnis2">
<File Name="datei1" ...
</Directory>
<File Name="datei1" ...
</Directory>
</Directory>

Von dieser Xml möchte ich alle Einträge (File, Size, TTH) aus Unterverzeichnis2 (& dessen Unterverzeichnissen) auslesen und diese dann in einer txt abspeichern.
Wobei in der txt zwischen den drei Werten noch jeweils Text eingefügt werden soll (z.B. blablaTTHblablaNAME bla Size)

Aufgrund meiner bisherigen Programmierkenntnisse versuche ich z.Z. diesen Grundgedanken umzusetzen...:

set XMLDATEI=liste.xml
set zähler1=0
set zähler2=1
für jede Zeile in (%XMLDATEI%) do (
wenn zähler1=1 do (
wenn in Zeile "<File Name=" do (
Name, Size, TTH auslesen & echo als text-Name-text-TTH-text-Size >> neu.txt
)
wenn in Zeile "<Directory Name=" set zähler2=+1
wenn in Zeile "</Directory>" set zähler2=-1
wenn zähler2=0 set zähler1=0
)
wenn in Zeile "<Directory Name="Unterverzeichnis2">" set zähler1=1
)

...wäre das in der Art überhaupt möglich über Batch oder lieg ich hier schon im Ansatz falsch?

Hoffe habe einigermassen Verständlich mein Problem schildern können & hoffe ihr könnt
mir evtl. helfen bzw. mir nen guten Lösung-/Denkansatz geben...
vielen Dank schonma!

gruß,
flusen
Mitglied: bastla
19.04.2008, aktualisiert 28.05.2013
Hallo flusenhirn und willkommen im Forum!

...wäre das in der Art überhaupt möglich über Batch oder lieg ich hier schon im Ansatz falsch?
Ein klares "Jein" dazu (zu beiden Teilen der Fage) .

Eine Umsetzung in Batch wäre zwar grundsätzlich möglich, aber wegen der in der Datei enthaltenen "<", ">" und Anführungszeichen eher mühsam.

Zum Algorithmus: Mit "Zähler2=1" zu beginnen, wird es (soferne die <Directory>- und </Directory>-Tags ordnungsgemäß paarweise gesetzt sind), unmöglich machen, dass der Zähler2 jemals 0 wird (bereits beim Auswerten der ersten Zeile erhöht sich der Zähler auf 2) ...

Mein Ansatz wäre, solange das gewünschte Unterverzeichnis nicht gefunden wurde, die Verzeichnisebenen gar nicht zu zählen, und dann auch zunächst von 0 auszugehen (das gesuchte "Unterverzeichnis2" erhöht dann den Zähler ohnehin schon auf 1, und beim Ende dieses Verzeichnis-Blocks wird dann wieder 0 erreicht).

Aufgrund des besseren Handlings von Sonderzeichen im Text würde ich zu VBScript greifen und hätte folgenden Entwurf anzubieten:
01.
'ExtractFromXMLDirList.vbs 
02.
XMLDatei = "liste.xml" 
03.
NeuDatei = "neu.txt" 
04.
Verz = "Unterverzeichnis2" 
05.
Text = "blabla" 
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
Zeilen = Split(fso.OpenTextFile(XMLDatei).ReadAll, vbCrLF) 
09.
 
10.
Set Neu = fso.CreateTextFile(NeuDatei, True) 
11.
 
12.
Z1 = 0 
13.
For Each Zeile In Zeilen 
14.
	If InStr(Zeile, Verz) Then 
15.
                Z1 = 1 
16.
                Z2 = 0 
17.
        End If 
18.
	If Z1 = 1 Then 
19.
		If InStr(Zeile, "<File Name=") Then 
20.
			Felder = Split(Zeile, """") 
21.
			Neu.WriteLine Text & "-" & Felder(1) & _ 
22.
				"-" & Text & "-" & Felder(5) & _ 
23.
				"-" & Text & "-" & Felder(3) 
24.
		End If 
25.
		If InStr(Zeile, "<Directory Name=") Then Z2 = Z2 + 1 
26.
		If InStr(Zeile, "</Directory>") Then Z2 = Z2 - 1 
27.
		If Z2 = 0 Then Exit For 
28.
	End If 
29.
Next 
30.
Neu.Close
Ein weiterer (kleiner) Vorteil von VBS gegenüber Batch ist, dass eine Schleife auch vorzeitig verlassen werden kann, was ich am Ende des "Unterverzeichnis2"-Blocks (wenn Z2 wieder 0 wird) auch nutze.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Datenbanken
Spalte in einer SQL-Tabelle auslesen. Werte durch Tab getrennt! (4)

Frage von Janekr77 zum Thema Datenbanken ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

XML
gelöst XML - XSLT Formatierung mehrere verschiedene Werte (13)

Frage von chrisen zum Thema XML ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...