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
GELÖST

XML nach bestimmten Feldern auslesen und in CSV exportieren

Frage Entwicklung Batch & Shell

Mitglied: nulpen

nulpen (Level 1) - Jetzt verbinden

14.12.2010, aktualisiert 13:10 Uhr, 6886 Aufrufe, 5 Kommentare

Hallo zusammen,

ich habe verschiedene TIPPS zur Umwandlung und auslesen hier im Forum schon durchgestöbert aber noch nichts zu meiner XML-Struktur gefunden

Folgende XML-Struktur (Auszüge)

<Fields>
<Field Name="TimeStamp">
2010-12-09 08:52:28
</Field>
<Field Name="GUID">
86A8B71C-FE16-4DF5-B501-33C5498966C1
</Field>
<Field Name="DOC-GUID">
21E946FE-9B10-49FF-9A8A-E2C8A02C6BF2
</Field>
<Field Name="Personalnummer_Eingabefeld">
00002
</Field>
<Field Name="Vorname_Eingabefeld">
Mark
</Field>

Diese Blöcke kommen in der XML-Datei mehrfach vor und ich möchte jetzt ausgewählte Felder in eine CSV/TXT-Datei bekommen.

Nehmen wir an die Felder GUID und Personalnummer_Eingabefeld würden benötigt

Alles was ich dankenswerterweise bisher hier gefunden habe geht von

<FELD1>Test</FELD1>
<FELD2>Test</FELD2>

Strukturen aus.

Idealzustand wäre jetzt eine CSV mit folgenden Inhalten

Zeile 1 "GUID","Personalnummer_Eingabefeld"
Zeile 2 "86A8B71C-FE16-4DF5-B501-33C5498966C1","00002"
Zeile 3 usw. die nächsten gefundenen Werte

Wahscheinlich würde schon eine XSL-Datei ausreichen ?

Danke für die Hilfe

Ralf
Mitglied: pieh-ejdsch
14.12.2010 um 19:15 Uhr
moin Ralf,

im Moment ist weder der genaue Aufbau Deiner XML, noch der CSV bekannt.

in Zeile 1 der CSV sollen die Werte aus </Field Name="INHALT"> nacheinander eingetragen werden. Zeile 1 ist aber nach dem zweiten Eintrag schon voll.
in Zeile 2 der CSV sollen die Werte jeweils eine Zeile nach </Field Name="INHALT"> nacheinander eingetragen werden - und ist auch nach dem zweiten Eintrag schon voll.

was soll dann in Zeile 3 stehen? </Field>

so wie Du den Aufbau der CSV Beschreibst, ist in Zeile 1 der nächste </Field Name="INHALT ..."> einzufügen oder wie?

Gruß Phil
Bitte warten ..
Mitglied: nulpen
14.12.2010 um 21:36 Uhr
Hallo Phil,

da ich die Daten später mit Excel weiterverarbeiten werde könnte ich sogar auf die "Überschriften" verzichten.

Genau diese sind mein Problem, wann immer ich mit XML zu tun habe und hier und auch bei Google nach
Hilfe gesucht habe wird von den TAGS ausgangen wie ich Sie als Muster aufgeführt habe.

Konkret brauche ich den Wert der zwischen

<Field Name="GUID">
und </Field> steht (in diesem Fall 86A8B71C-FE16-4DF5-B501-33C5498966C1)

GUID wäre dann die spätere Spaltenbezeichnung.

Ich kann ein bischen was mit regulären Ausdrücken möchte die Sache aber automatisiert als Batch ablaufen lassen.

Da diese Gruppe an TAGS (und noch mehr) mehrfach in der XML vorkommen dachte ich umgangsprachlich an folgendes:

"Suche in der XML-Datei bis Du "Field Name=GUID" + Field Name="Personalnummer_Eingabe" usw findest und schreibe
die jeweils nachfolgenden Werte in eine Zeile einer Textdatei mit ";" getrennt.
Sobald Du beim nächsten "Field Name=GUID" ankommst beginnst Du eine neue Zeile und schreibst die nächsten Werte in eine
neue Zeile."

Wie gesagt es gibt hierfür Lösungen im Netz die aber immer nur nach dem Wert zwischen <FELD1> und <\Feld> suchen und diesen auch finden.

Mein Problem ist daß mein Anfangswert <FELD1 Name="xyz"> heißt und dann erst der Wert kommt den ich brauche.

Welceh Systax brauche ich um an diesen Tag und den nachfolgenden Wert zu kommen.

Danke für Deine Antwort


Ralf
Bitte warten ..
Mitglied: Connor1980
16.12.2010 um 13:16 Uhr
Hallo Ralf,

einfacher wäre es, wenn die Felder nochmal in Node gruppiert wären, dann könntest du das nach diesem Beispiel erledigen.

Grüße
Bitte warten ..
Mitglied: pieh-ejdsch
16.12.2010 um 22:19 Uhr
moin Ralf,

hier ist das Script welches Deine Aufgabe löst.

du kannst die Batch auch mit einem Parameter, welcher die XML-Datei ist aufrufen oder in der Batch den Namen angeben.
die csv wird im gleichen Verzeichnis erzeugt.

wenn Du mehr Kopfdaten als 9 hast must Du die Nummerierung mit Kopfdaten01-Kopfdaten99 machen.

01.
@echo off&setlocal 
02.
 
03.
REM "Suche in der XML-Datei bis Du "Field Name=GUID" + Field Name="Personalnummer_Eingabe" usw findest und schreibe die jeweils nachfolgenden Werte in eine Zeile einer Textdatei mit ";" getrennt. Sobald Du beim nächsten "Field Name=GUID" ankommst beginnst Du eine neue Zeile und schreibst die nächsten Werte in eine neue Zeile." 
04.
 
05.
:: XML-Datei angeben oder als ersten parameter der Batch uebergeben 
06.
set "XML-Name=%~1" 
07.
if not defined XML-Name set "XML-Name=D:\Adminhelp\XML-test.XML" 
08.
 
09.
set KopfDaten1="GUID" 
10.
set KopfDaten2="Personalnummer_Eingabefeld" 
11.
::mehr Kopfdaten mit: set Kopfdaten3=... 
12.
 
13.
::Ueberschrift ausblenden: set "Ueberschrift=" 
14.
set "Ueberschrift=1" 
15.
 
16.
set "DatenLesenVorn=<Field Name=" 
17.
set "DatenLesenHinten=>" 
18.
 
19.
set "EndeDatenLesen=</Field>" 
20.
 
21.
 
22.
if defined Ueberschrift ( 
23.
	set "Ueberschrift=" 
24.
	for /f "tokens=1* delims==" %%i in ('set Kopfdaten') do ( 
25.
		if defined Ueberschrift (setlocal enabledelayedexpansion 
26.
			for /f "delims=" %%k in ("!Ueberschrift!") do endlocal&set "Ueberschrift=%%k,%%j" 
27.
		) else set "Ueberschrift=%%j" 
28.
)	) 
29.
 
30.
31.
type "%XML-Name%" 
32.
setlocal enabledelayedexpansion 
33.
echo. 
34.
echo.!DatenLesenVorn!!KopfDaten1!!DatenLesenHinten! 
35.
endlocal 
36.
)>"%temp%\XML" 
37.
 
38.
39.
for /f "usebackq delims=" %%a in ("%temp%\XML") do ( 
40.
	for /f "tokens=1* delims==" %%b in ('set KopfDaten') do ( 
41.
		setlocal EnableDelayedExpansion 
42.
		Rem wenn KopfZeile gesetzt und gefunden dann zeige Ergebnis der Zeile 
43.
		if "%DatenLesenVorn%!Zeigen!%DatenLesenHinten%" == "%%a" ( 
44.
			if defined Line ( 
45.
				if defined Ueberschrift echo.!Ueberschrift! 
46.
				echo.!Line! 
47.
48.
			endlocal 
49.
			if defined Line set "Ueberschrift=" 
50.
			set "Line=" 
51.
		) else endlocal 
52.
		if "%DatenLesenVorn%%Kopfdaten1%%DatenLesenHinten%" == "%%a" if not defined Zeigen set "Zeigen=%Kopfdaten1%" 
53.
		if "%EndeDatenLesen%" == "%%a" set "Lesen=" 
54.
		setlocal enabledelayedexpansion 
55.
		if "!Lesen!" == "%%c" ( 
56.
			endlocal 
57.
			if defined Line ( 
58.
				setlocal enabledelayedexpansion 
59.
				for /f "delims=" %%d in ("!Line!") do endlocal&set "Line=%%d;%%a" 
60.
			) else set "Line=%%a" 
61.
		) else endlocal 
62.
		if "%DatenLesenVorn%%%c%DatenLesenHinten%" == "%%a" set "Lesen=%%c" 
63.
)	) 
64.
)>%XML-Name:~0,-4%.csv 
65.
del "%temp%\XML"
Gruß Phil
Bitte warten ..
Mitglied: nulpen
18.01.2011 um 22:26 Uhr
Hallo Phil,

Danke, das war es !!!!!!!

Ich war bis 10.01. an anderen Dingen dran deshalb erst jetzt die Antwort

!!!!
Super
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

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

Frage von Akrosh zum Thema PHP ...

VB for Applications
Csv in xml umwandeln mit VBA (8)

Frage von 130771 zum Thema VB for Applications ...

Entwicklung
Eine Analyse-csv via Powershell in Sharepoint exportieren? (2)

Frage von Scuzzy zum Thema Entwicklung ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (24)

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

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