tyga911
Goto Top

CSV to XML Konverter

Hallo zusammen,

da das mein erster Beitrag ist, hoffe ich ich bin hier richtig mit meiner Fage.

Und zwar wollte ich wissen ob jemand eine Möglichkeit hat/kennt eine .csv in eine .xml umzuwandeln?

Am besten wäre es auf command line basis, da dann eine Konvertierung automatisiert werden kann =)

Für eure Hilfe schon mal vielen Dank :D

Content-ID: 271900

Url: https://administrator.de/contentid/271900

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

114757
114757 13.05.2015 aktualisiert um 10:20:12 Uhr
Goto Top
Hallo Tyga911,
wie soll die Unwandlung denn aussehen ? Ein root-Element,dann für jede Zeile ein row Element mit den Spalten als weitere Elemente ?
Da lässt sich was einfaches mit Powershell scripten.

Gruß jodel32
Tyga911
Tyga911 13.05.2015 um 10:28:29 Uhr
Goto Top
Hallo jodel32,

danke für die schnelle Antwort :D

hier ist ein Beispiel wie es in etwa aussehen soll.

Ich weiss nicht ob sowas überhaupt möglich ist?

Kannst mir ja trotzdem mal die Möglichkeit mit einem root-Element und für jede Zeile ein row Element per Powershell zeigen =)

<AK>
<AKTION>1</AKTION>
<EXTNR>1155821</EXTNR>
<ADR-AG>
<EXTNR>1001</EXTNR>
</ADR-AG>
<SD>
<EXTNR>2930121</EXTNR>
<ADR-ABS>
<NR>206720</NR>
<NAME1>TEST</NAME1>
<ORT1>R</ORT1>
<LAND>D</LAND>
<ISOLAND>DEU</ISOLAND>
<PLZ>95502</PLZ>
<STRASSE>Str.</STRASSE>
<HAUSNR>12</HAUSNR>
<TEXTRG/>
<TEXTGS/>
<LATITUDE>0.00000</LATITUDE>
<LONGITUDE>0.00000</LONGITUDE>
</ADR-ABS>

LG
colinardo
colinardo 13.05.2015 aktualisiert um 12:10:38 Uhr
Goto Top
Hallo tyga911,
um das Beispiel von @114757 aufzugreifen (sorry jodel falls du schon an der Lösung gearbeitet haben solltest):
Folgendes Powershell-Script konvertiert alle CSV-Dateien eines Ordners zu XML-Dateien mit gleich lautendem Pfad und Namen.
param(
    [string]$folder,
    [string]$delimiter = ";"  
)
# Alle CSV-Dateien des Ordners durchlaufen
gci $folder -Filter "*.csv" | %{  
    write-host "Konvertiere '$($_.Fullname)' ..." -ForegroundColor Green  
    # importiere CSV-Datei als Objekt
    $csv = import-csv $_.Fullname -Delimiter $delimiter
    # 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"?><root></root>')  
    # Root-Knoten referenzieren
    $root = $xml.SelectSingleNode("/root")  
    # für jede Zeile der CSV-Datei ...
    foreach($line in $csv){
        # erzeuge ein neues Row-Element
        $row = $xml.CreateElement("row")  
        # 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.($_)
            $row.AppendChild($col) | out-null
        }
        # füge das Row-Element im Root-Knoten ein
        $root.AppendChild($row) | out-null
    }
    # Speichere die neue XML-Datei
    $xml.Save($_.DirectoryName + "\" + $_.BaseName + ".xml")  
}
Dem Script übergibt man als Parameter den Ordnerpfad in dem die CSV-Dateien liegen und den Delimiter der CSV-Dateien:
"C:\convert_script.ps1" "C:\Pfad" ";"

Heraus kommt dann z.B. bei folgender Beispiel CSV-Datei ...
Info1;Info2;Info3;Info4;Info5;Info6;Testzahl
00001;0022;Blau;Bezahlt;EDV;Neu;0000100
000;01123;Schwarz;Ratenzahlung;EDV;Gebraucht;0000200,5
000214485;00055885;Blau;Bezahlt;Hotline;Neu;99,3
000555654;00122458;Silber;Ratenzahlung;Chef;Neu;33,1
... diese XML-Struktur:
<?xml version="1.0" encoding="utf-8"?> 
<root>
  <row>
    <Info1>00001</Info1>
    <Info2>0022</Info2>
    <Info3>Blau</Info3>
    <Info4>Bezahlt</Info4>
    <Info5>EDV</Info5>
    <Info6>Neu</Info6>
    <Testzahl>0000100</Testzahl>
  </row>
  <row>
    <Info1>000</Info1>
    <Info2>01123</Info2>
    <Info3>Schwarz</Info3>
    <Info4>Ratenzahlung</Info4>
    <Info5>EDV</Info5>
    <Info6>Gebraucht</Info6>
    <Testzahl>0000200,5</Testzahl>
  </row>
  <row>
    <Info1>000214485</Info1>
    <Info2>00055885</Info2>
    <Info3>Blau</Info3>
    <Info4>Bezahlt</Info4>
    <Info5>Hotline</Info5>
    <Info6>Neu</Info6>
    <Testzahl>99,3</Testzahl>
  </row>
  <row>
    <Info1>000555654</Info1>
    <Info2>00122458</Info2>
    <Info3>Silber</Info3>
    <Info4>Ratenzahlung</Info4>
    <Info5>Chef</Info5>
    <Info6>Neu</Info6>
    <Testzahl>33,1</Testzahl>
  </row>
</root>
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
114757
114757 13.05.2015 aktualisiert um 17:52:33 Uhr
Goto Top
@colinardo Danke für deine Übernahme face-smile
hier ist ein Beispiel wie es in etwa aussehen soll.
@Tyga911 Das ist aber kein valides XML von dir, da fehlen so einige schließende Tags ...
Siehe die Lösung von @colinardo, das sollte passen, hab's mal getestet und funktioniert hier auch sehr schön.

Gruß jodel32
Tyga911
Tyga911 15.05.2015 um 11:47:44 Uhr
Goto Top
Hey,

danke für eure hilfe.

Das mit dem Script klappt wunderbar.

Vielen dank für eure Hilfe =)

LG Tyga911
114757
114757 19.05.2015 um 11:51:42 Uhr
Goto Top
Den Beitrag dann bitte noch auf gelöst setzen.