XML in CSV umwandeln

evgenij

Well-Known Member
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?
 
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.
 
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!
 
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.
 
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.
 
Zurück
Oben