
122708
22.06.2015, aktualisiert um 12:33:03 Uhr
Aus Dateien Strukturiert XMLs erstellen
Schönen guten Morgen,
ich bin neu also verzeiht Eventuelle ungenaue Fragestellungen ;)
Ausgangssituation:
ca. 1600 1Kb große Dateien
die folgendermaßen aufgebaut sind vom Inhalt:
Typ;Count
10;70
Das ; fungiert als Trennung Die Oberste Zeile ist die Überschrift die Unterzeile der Wert.
ich möchte daraus jetzt XML´s erstellen, für jede Quelle eine wobei das Ziel wie die Quellen heißen sollte, bis natürlich auf die Dateiendung.
Die Dateien befinden sich alle in einem Ordner.
Das Ziel sollte so aussehen:
das von Hand zu machen, sagen wir ist etwas mühsam ;)
Ich habe schon Konvertierungsprogramme etc. gesucht und leider nicht gefunden.
Dachte es sei Eventuell mit Excel und VBA möglich aber darin sind meine Kenntisse naja ich nenne es lieber vorsichtig "nicht vorhanden".
Wäre nett wenn jemand Helfen könnte.
Gruß Maxiam
ich bin neu also verzeiht Eventuelle ungenaue Fragestellungen ;)
Ausgangssituation:
ca. 1600 1Kb große Dateien
die folgendermaßen aufgebaut sind vom Inhalt:
Typ;Count
10;70
Das ; fungiert als Trennung Die Oberste Zeile ist die Überschrift die Unterzeile der Wert.
ich möchte daraus jetzt XML´s erstellen, für jede Quelle eine wobei das Ziel wie die Quellen heißen sollte, bis natürlich auf die Dateiendung.
Die Dateien befinden sich alle in einem Ordner.
Das Ziel sollte so aussehen:
<?xml version="1.0"?>
<Type="10">
<Barcode/>
<Count>70</Count>
</Document>
das von Hand zu machen, sagen wir ist etwas mühsam ;)
Ich habe schon Konvertierungsprogramme etc. gesucht und leider nicht gefunden.
Dachte es sei Eventuell mit Excel und VBA möglich aber darin sind meine Kenntisse naja ich nenne es lieber vorsichtig "nicht vorhanden".
Wäre nett wenn jemand Helfen könnte.
Gruß Maxiam
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 275308
Url: https://administrator.de/forum/aus-dateien-strukturiert-xmls-erstellen-275308.html
Ausgedruckt am: 27.04.2025 um 11:04 Uhr
24 Kommentare
Neuester Kommentar

Moin Maxiam,
ein fertiges Script für einen CSV-to-XML Converter findest du hier:
CSV to XML Konverter
Gruß jodel32
ein fertiges Script für einen CSV-to-XML Converter findest du hier:
CSV to XML Konverter
Gruß jodel32

Zitat von @122708:
Sollte ich hierfür dann erstmal alle Dokumente in CSV Dateien umkonvertieren oder funktioniert dies ebenso mit .txt Dateien?
Solange die Dateien eine CSV-Struktur haben ist die Endung dem Script vollkommen wurscht. Nur die Angabe der Delimiter muss stimmen.Sollte ich hierfür dann erstmal alle Dokumente in CSV Dateien umkonvertieren oder funktioniert dies ebenso mit .txt Dateien?

Zitat von @122708:
muss ich bestimmt nichts in dem Script ändern?
Du weist schon das das ein Powershell-Script ist ?muss ich bestimmt nichts in dem Script ändern?
Diese Zeile 6 im Script musst du natürlich an deine Endung anpassen, wenn man einmal durch das Script gegangen wäre
gci $folder -Filter "*.csv" | %{
gci $folder -Filter "*.txt" | %{

Zitat von @122708:
Wie bekomme ich es hin das er
das es so aussieht?
Das ist kein valides XML und geht so nicht ... dein DOCUMENT-Knoten hat kein entsprechendes Opening TAG !!Wie bekomme ich es hin das er
> <?xml version="1.0"?>
> <Type="10">
> <Barcode></Barcode>
> <Count>70</Count>
> </Document>
>
>
das es so aussieht?
Und bei mehreren Zeilen geht's dann so auch nicht mehr in dieser Art und Weise...

Dann poste doch bitte mal mit Codetags (
<code> Quellcode </code>
) ein korrektes Beispiel deiner CSV-Datei. Danke !!
und das hier:
<Type="10">
geht auch nicht, nur ein Attribut ohne Elementname.
Bissher bleibt nur der fehler das er nicht so Korrekt mit leeren Zeilen umgeht und die row geschichte
Du wirst immer konfuser ... Was meinst du mit leeren Zeilen ? Spalten oder die txt hat zwar Überschriften aber keine Daten ???? und mit der row-Geschichte ?? die du ja jetzt plötzlich in deiner finalen Version wieder drin hast ..?? Bitte bemüh dich doch mal dein Vorhaben konkret und exakt zu formulieren . Danke !!!!!!!!!!

Das Feld Kommentar ist z.b. manchmal leer.
Das ist per Default so ....oder meinst du das der TAG nicht erscheinen soll ?Das geht dann so:
(die ROW-Zeile habe ich jetzt auch mal entfernt, war ja leider nicht ganz klar ob du die jetzt auch haben wolltest)
param(
[string]$folder,
[string]$delimiter = ";"
)
# Alle CSV-Dateien des Ordners durchlaufen
gci $folder -Filter "*.txt" | %{
write-host "Konvertiere '$($_.Fullname)' ..." -ForegroundColor Green
# importiere CSV-Datei als Objekt
$csv = import-csv $_.Fullname -Delimiter $delimiter
if ($csv){
# Spaltennamen der CSV-Datei extrahieren
$cols = $csv | gm -MemberType NoteProperty | select -ExpandProperty Name
# erzeuge neues XML-Dokument
$xml = New-Object XML
# XML Grundgerüst laden
$xml.LoadXml('<?xml version="1.0" encoding="utf-8"?><Document></Document>')
# Root-Knoten referenzieren
$root = $xml.SelectSingleNode("/Document")
# für jede Zeile der CSV-Datei ...
foreach($line in $csv){
# für jede Spalte der Zeile erstelle ein neues Element mit dem Namen der Spalte und dem Inhalt der aktuellen Zeile
$cols | %{
$col = $xml.CreateElement($_)
$col.InnerText = $line.($_)
$root.AppendChild($col) | out-null
}
}
# Speichere die neue XML-Datei
$xml.Save($_.DirectoryName + "\" + $_.BaseName + ".xml")
}
}

<Kommentar />
Das ist in dieser Art geschlossen!! Pfeif dir doch bitte erst mal die XML-Grundlagen rein !Viel Erfolg dann noch
Wird mir zu blöd ...

Zitat von @122708:
Genau Row sollte raus, der Tag der sich jetzt nicht schließt ist nun Ausgeblendet was aber ja nicht so sein sollte, er soll
sich ja nur richtig aufbauen :D
Wie gesagt die Syntax ist RICHTIG !!!!Genau Row sollte raus, der Tag der sich jetzt nicht schließt ist nun Ausgeblendet was aber ja nicht so sein sollte, er soll
sich ja nur richtig aufbauen :D
<Kommentar /> ist nach XML Sytax korrekt geschlossen !!
http://www.w3schools.com/schema/schema_complex_empty.asp

Zitat von @122708:
</Kommentar>
Das kann nicht sein, das dieser so erscheint !</Kommentar>
Was bleibt ist wenn der TAG in der .txt ein leerzeichen enthält, überspringt er diesen.
Nö hier nicht ...Ausgabe sieht hier so aus:


Die Tags Angeordnet sind wie in der .txt
Das ist in einer XML meistens egal aber bitte, dann hier die Dummie-Version ...param(
[string]$folder,
[string]$delimiter = ";"
)
# Alle CSV-Dateien des Ordners durchlaufen
gci $folder -Filter "*.txt" | %{
write-host "Konvertiere '$($_.Fullname)' ..." -ForegroundColor Green
# importiere CSV-Datei als Objekt
$csv = import-csv $_.Fullname -Delimiter $delimiter
if ($csv){
$content = @"
<?xml version="1.0" encoding="utf-8" ?>
<document>
<Type>$($csv.Type)</Type>
<Date>$($csv.Date)</Date>
<Kommentar>$($csv.Kommentar)</Kommentar>
<Count>$($csv.Count)</Count>
</document>
"@ | Set-Content -Path ($_.DirectoryName + "\" + $_.BaseName + ".xml")
}
}
Wenn das Encoding nicht stimmt, musst du bei Import-CSV das entsprechende Encoding mit angeben (dafür brauchst du aber mindestens Powershell 3.0):
$csv = import-csv $_.Fullname -Delimiter $delimiter -Encoding UTF8
Und tschüss .... i'm out now
Powershell Tutorials

Jetzt lässt sich die xml nichtmehr per IE öffnen
War nur ein Typo drin, ist korrigiert ...