| Autoren: | Steffen Schluff Orientation in Objects GmbH Kristian Köhler Orientation in Objects GmbH | ![]() Steffen Schluff ![]() Kristian Köhler |
| Datum: | Oktober 2002 |

Eine Konvertierung oder Weiterverarbeitung von Daten, die im XML Format vorliegen, ist relativ einfach. Über die eXtensible Stylesheet Language (XSL) lassen sich XML Dokumente regelbasiert in so gut wie jedes andere Format transformieren. So kann man z. B. aus einer bestehenden XML Datenquelle recht schnell ansprechende HTML oder PDF Dateien erstellen, bzw. sie in andere Systeme importieren. Eine leichte Umwandlung anderer Formaten wie z. B. des weitverbreiteten CSV Formates ist im Gegensatz dazu meist nicht so einfach möglich.
Mit dem vorliegenden CSV2XML Konverter wurde eine Möglichkeit geschaffen bestehende CSV Dateien in das XML Format zu übertragen und somit für eine leichte Weiterverarbeitung zur Verfügung zu stellen.
Für eine eigenentwickelte Katalogsoftware mussten bestehende Artikeldaten aus verschieden Altsystemen importiert werden. Die Daten lagen meist im CSV Format vor und konnten somit nicht direkt eingespielt werden. Da es sich bei der Katalogsoftware um eine vollständige J2EE Anwendung handelt, die über eine XML basierte BMECat Import-Schnittstelle verfügt, musste also nur die Möglichkeit geschaffen werden, die CSV Daten in ein XML Format zu bringen und mittels XSLT in eine valides BMECat Format zu transformieren.
Da es sich bei der Problematik des Umwandelns von CSV in XML um ein recht allgemeingültiges Problem handelt wurde ein kleines SwingGUI entwicklet, mit dem man diese Aufgabe recht einfach erledigen kann.
Nachfolgend werden kurz die einzelnen Technologien beschrieben, die während der Umsetzung zum Einsatz kamen.
Bei SAX handelt es sich um das S imple A PI for X ML processing, das ein ereignisorientiertes, serielles Verarbeiten von XML Daten unter Java ermöglicht.
Die Java Foundation Classes (JFC) dienen der Erstellung grafischen Oberflächen. Sie werden auch als Swing Klassen bezeichnet.
Bei JUnit handelt es sich um ein Open Source Unit Testing Framework mit dessen Hilfe man seinen Code besser testen und weiter verbessern kann. Die Testresultate lassen sich als XML Dateien erzeugen und über mitgelieferte Sytlesheets in HTML Seiten transformieren.
Java Help ist ein plattformunabhängiges erweiterbares Hilfesystem, das von Entwicklern und Hilfeauthoren leicht in Applets, Komponenten, Anwendungen und Betriebssysteme eingebaut werden kann.
Ant ist ein auf Java basiertes Build Tool für Java Softwareprojekte und läßt sich entfernt mit Make vergleichen, ist jedoch vor allem durch seine XML Builddateien ungleich einfacher in der Handhabung. Darüberhinaus läßt sich Ant in fast alle populäre integrierten Entwicklungsumgebungen integrieren und ist bei Bedarf beliebig um eigene Tasks erweiterbar.
Folgendes UML Diagramm stellt den Kern der Anwendung dar: 
In Standardumfang von Java ist ein StringTokenizer enthalten, mit dem man Strings, die durch ein bestimmtes Zeichen getrennt sind, einlesen kann. Leider funktioniert diese Klasse nicht in alle Situationen. Es werden z. B. leere Elemente nicht "richtig "beachtet bzw. übergangen. Die Klasse CSVTokenizer stellt ähnliche Funktionalität wie die Klasse StringTokenizer zur Verfügung. Sie kann allerdings mit leeren Elementen umgehen. Für diese Klasse wurde ein JUnit Test geschrieben, der die Funktionalität überprüft.
Beispiel:
public void testSimpleTokenizerNextTokenWithEmptyValues(){
tokenizer = new CSVTokenizer("Das ist mein;;;zu trennender Text; hallo;", ';');
assertEquals("Das ist mein", tokenizer.nextElement());
assertEquals("", tokenizer.nextElement());
assertEquals("", tokenizer.nextElement());
assertEquals("zu trennender Text", tokenizer.nextElement());
assertEquals(" hallo", tokenizer.nextElement());
assertEquals("", tokenizer.nextElement());
assertEquals(null, tokenizer.nextElement());
assertEquals(null, tokenizer.nextElement());
}Die Klasse CSVReader liest über den CSVTokenizer die einzelnen Zeilen der CSV Datei ein und erzeugt über einen ContentHandler SAX Events.
Der SAX2Writer stellt ein ContentHandler dar, der über die SAX Callback-Methoden ein neues XML Dokument erzeugt.
Beispiel:
/* * @see ContentHandler#startDocument() */
public void startDocument() throws SAXException {
String documentStartString = "<?xml version=\"1.0\" encoding=\""
+ encoding + "\"?><" + ROOTELEMENTNAME + ">";
try {
out.write(documentStartString, 0, documentStartString.length());
out.flush();
}
catch(IOException e) {
fatalError(new SAXParseException("", new LocatorImpl(), e));
}
} Nach dem Start der Anwendung öffnet sich das Hauptfenster, in dem man eine Ein- und eine Ausgabedatei definieren kann. Die Auswahl erfolgt über die beiden Schaltflächen Import Datei auswählen und Export Datei auswählen. Bei der ersten Datei muss es sich um eine CSV Datei handeln, die in XML transformiert werden soll. Sind beide Dateien angegeben, so ist die dritte Schaltfläche aktiviert und der Transformationsvorgang kann angestoßen werden.

Werden über den Optionsdialog keine Änderungen vorgenommen gelten beim Import folgende Standardeinstellungen.
; getrennt " voneinander getrennt row Element importiert Beispiel:
Vorname;Name;Ort;PLZ;Strasse;Text;Bemerkung Max;Mustermann;Mannheim;68209;Musterstrasse 23;\ "Mein Text mit ;Sonderzeichen";"meine Bemerkungen" Gerda;Gans;Mannheim;68209;Musterstrasse 20;\ "mein";"meine zweiten Bemerkungen";
wird zur folgenden XML Datei:
<?xml version="1.0" encoding="UTF-8"?>
<csvimport>
<row>
<Vorname>Max</Vorname>
<Name>Mustermann</Name>
<Ort>Mannheim</Ort>
<PLZ>68209</PLZ>
<Strasse>Musterstrasse 23</Strasse>
<Text>mein Text mit ;Sonderzeichen</Text>
<Bemerkung>meine Bemerkungen</Bemerkung>
</row>
<row>
<Vorname>Gerda</Vorname>
<Name>Gans</Name>
<Ort>Mannheim</Ort>
<PLZ>68209</PLZ>
<Strasse>Musterstrasse 20</Strasse>
<Text>mein</Text>
<Bemerkung>meine zweiten Bemerkungen</Bemerkung>
</row>
</csvimport>Über den Optionsdialog lassen sich folgende Werte änhelp\html\dern:
|, ;, , stehen zur Verfügung) " oder ') 
Den CSV2XML Konverter gibt es als Java Web Start Anwendung, zum Download oder zum Einbinden in eigene Programme! Lesen Sie hierzu sorgfältig unsere Nutzungsbedingungen
Falls Sie noch kein Java Web Start installiert haben können Sie Java Web Start hier downloaden und installieren:
Den CSV2XML Konverter als Java Web Start Anwendung starten Sie durch folgenden Link: CSV2XML Konverter als Java Web Start Anwendung
Alles was sie benötigen ist ein installiertes Java(TM) Runtime Environment (JRE) und dieses Java Archiv. Sie können die Anwendung durch folgenden Kommandozeilenaufruf starten:
java -jar CSV2XML.jar
Falls Sie unter Windows arbeiten und die Dateiendung jar mit Java verknüpft haben, können Sie die Anwendung auch über einen Doppelklick im Datei-Explorer starten.
download Java Archiv CSV2XML.jar (ca. 500 kb)
Falls Sie den CSV2XML Konverter in eigenen Programmen einsetzen möchten, könne Sie folgendes Java Archiv herunterladen und die Klasse de.oio.util.xml.CSVReader in ihren eigenen Code einbinden. (Archiv (ca. 9 kb))
Die Klasse de.oio.util.xml.CSVReader ist in folgenden JavaDoc Dokumenten beschrieben (online HTML, Download JavaDoc ).
SAX Project
(http://www.saxproject.org/)
The Swing Connection
(http://java.sun.com/products/jfc/tsc/index.html)
JUnit.org
(http://www.junit.org)
Java(TM) Help
(http://java.sun.com/products/javahelp/index.html)
Apache Ant - Ant
(http://jakarta.apache.org/ant)