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, 5708 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
Ähnliche Inhalte
Batch & Shell
Auslesen von bestimmten Datenendungen am Server (6)

Frage von 14634 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - Ausgabe gruppieren - gleichzeitig Werte in anderer Spalte addieren (9)

Frage von Affkopf89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Erkennung und -Abwehr
Virenschutz - Meinungen (25)

Frage von honeybee zum Thema Erkennung und -Abwehr ...

Windows 10
Welches OS für Firmengeräte? (17)

Frage von MarkusVH zum Thema Windows 10 ...

Server-Hardware
gelöst Erfahrungswerte Hardwaresupport physikalische Server (16)

Frage von Devilx zum Thema Server-Hardware ...

Exchange Server
SBS2011: POP3-Connector 10 MB Grenze Email Benachrichtigung (15)

Frage von bogi1102 zum Thema Exchange Server ...