XML in CSV umwandeln

Dieses Thema im Forum "Programmieren" wurde erstellt von evgenij, 22 März 2012.

  1. evgenij

    evgenij New Member

    Registriert seit:
    11 November 2011
    Beiträge:
    28
    Hallo zusammen,

    stehe grad vor folgender Aufgabe:
    Es gibt im xml-Format abgespreicherte Konfigurationsdateien, welche folgenden
    Aufbau haben:
    Code:
    <Configuration>
    <NAME>Config1</NAME>
    <HOST>Host1</HOST>
    <PORT>8080</PORT>
    </Configuration>
    
    oder aber auch

    Code:
    <Configuration>
    <NAME>Config2</NAME>
    <TYPE>Type2</TYPE>
    <HOST>Host2</HOST>
    <PORT>8080</PORT>
    <TIMEOUT>100</TIMEOUT>
    </Configuration>
    
    Sprich Anzahl der Elemente und deren Reihenfolge kann/wird unterschiedlich sein.
    Daraus muss eine CSV-Datei erzeugt werden. Alle Elemente sollen als Spalten abgebildet werden.
    Code:
    NAME;HOST;PORT;TYPE;TIMEOUT
    Config1;Host1;8080;;
    Config2;Host2;8090;Type2;100
    
    Hat jemand eine Idee?
  2. Rakor

    Rakor Moderator Mitarbeiter

    Registriert seit:
    17 September 2009
    Beiträge:
    1.177
    In Perl gibt es es eine XML-Bibliothek mit der sowas machbar sein sollte. Wenn du Perl nicht abgeneigt bist wühl dich mal duch cpan und such danach. Ich halte das beinahe für den einfachsten Weg.
  3. KobRheTilla

    KobRheTilla used register

    Registriert seit:
    20 Januar 2011
    Beiträge:
    360
    XML::Lite kann ich empfehlen.

    Rob
  4. evgenij

    evgenij New Member

    Registriert seit:
    11 November 2011
    Beiträge:
    28
    Hi,

    danke euch für die schnelle Antwort.
    Ich werde mir die beiden Bibliotheken angucken und versuche etwas brauchbares zu coden.
    Hat vielleich einer von euch einen kleinen Beispiel für mich? Bin weder mit Perl noch mit einer anderer Programmiersprache auf "du" und würde mich über jede Unterstützung freuen.

    Danke nochmal!
  5. unull

    unull Nervensäge

    Registriert seit:
    28 Februar 2005
    Beiträge:
    147
    Ort:
    ::1
    Also mit Ruby und xml-simple wuerde das so gehen (kurz eben zusammengehackt):

    Code:
    #!/usr/bin/env ruby
    
    require 'rubygems'
    require 'xmlsimple'
    require 'csv'
    
    entries = XmlSimple.xml_in('test.xml')
    
    entries['Configuration'].each do |e|
      tmp = Array.new
      e.each { |k,v|  tmp << v }
      puts tmp.flatten!.to_csv(:col_sep => ';', :quote_char => ' ')
    end
    
    und test.xml:

    Code:
    
    <foo>
      <Configuration>
        <NAME>Config1</NAME>
        <HOST>Host1</HOST>
        <PORT>8080</PORT>
      </Configuration>
      <Configuration>
        <NAME>Config2</NAME>
        <TYPE>Type2</TYPE>
        <HOST>Host2</HOST>
        <PORT>8080</PORT>
        <TIMEOUT>100</TIMEOUT>
      </Configuration>
    </foo>
    
    Ergibt dann bei mir den Output:
    Code:
    ~  ruby test.rb
    Config1;Host1;8080
    Config2;Type2;Host2;8080;100
    
    Du wirst das halt noch sortieren muessen.
  6. Vincent Vega

    Vincent Vega phisch

    Registriert seit:
    28 Januar 2005
    Beiträge:
    412
    Sollte das nicht mit XSLT bzw. einem ganz normalen XML Stylesheet machbar sein? Damit bräuchte man keine speziellen Tools oder selbst geschriebenen Code, sondern könnte direkt auf xsltproc oder ähnliches losgehen.