XML nach bestimmten Feldern auslesen und in CSV exportieren
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 156962
Url: https://administrator.de/contentid/156962
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
5 Kommentare
Neuester Kommentar
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
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
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
einfacher wäre es, wenn die Felder nochmal in Node gruppiert wären, dann könntest du das nach diesem Beispiel erledigen.
Grüße
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.
Gruß Phil
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.
@echo off&setlocal
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."
:: XML-Datei angeben oder als ersten parameter der Batch uebergeben
set "XML-Name=%~1"
if not defined XML-Name set "XML-Name=D:\Adminhelp\XML-test.XML"
set KopfDaten1="GUID"
set KopfDaten2="Personalnummer_Eingabefeld"
::mehr Kopfdaten mit: set Kopfdaten3=...
::Ueberschrift ausblenden: set "Ueberschrift="
set "Ueberschrift=1"
set "DatenLesenVorn=<Field Name="
set "DatenLesenHinten=>"
set "EndeDatenLesen=</Field>"
if defined Ueberschrift (
set "Ueberschrift="
for /f "tokens=1* delims==" %%i in ('set Kopfdaten') do (
if defined Ueberschrift (setlocal enabledelayedexpansion
for /f "delims=" %%k in ("!Ueberschrift!") do endlocal&set "Ueberschrift=%%k,%%j"
) else set "Ueberschrift=%%j"
) )
(
type "%XML-Name%"
setlocal enabledelayedexpansion
echo.
echo.!DatenLesenVorn!!KopfDaten1!!DatenLesenHinten!
endlocal
)>"%temp%\XML"
(
for /f "usebackq delims=" %%a in ("%temp%\XML") do (
for /f "tokens=1* delims==" %%b in ('set KopfDaten') do (
setlocal EnableDelayedExpansion
Rem wenn KopfZeile gesetzt und gefunden dann zeige Ergebnis der Zeile
if "%DatenLesenVorn%!Zeigen!%DatenLesenHinten%" == "%%a" (
if defined Line (
if defined Ueberschrift echo.!Ueberschrift!
echo.!Line!
)
endlocal
if defined Line set "Ueberschrift="
set "Line="
) else endlocal
if "%DatenLesenVorn%%Kopfdaten1%%DatenLesenHinten%" == "%%a" if not defined Zeigen set "Zeigen=%Kopfdaten1%"
if "%EndeDatenLesen%" == "%%a" set "Lesen="
setlocal enabledelayedexpansion
if "!Lesen!" == "%%c" (
endlocal
if defined Line (
setlocal enabledelayedexpansion
for /f "delims=" %%d in ("!Line!") do endlocal&set "Line=%%d;%%a"
) else set "Line=%%a"
) else endlocal
if "%DatenLesenVorn%%%c%DatenLesenHinten%" == "%%a" set "Lesen=%%c"
) )
)>%XML-Name:~0,-4%.csv
del "%temp%\XML"
Gruß Phil