# XML erzeugen Tipps und Tricks



## Chrizz993 (31. Jul 2014)

Hallo zusammen,

ich habe noch nie mit XMLs gearbeitet und suche daher etwas Hilfe.


Ich möchte gerne eine DB auslesen und aus den ausgelesenen Daten eine bzw. viele XML Datein erzeugen für verschiedene Tupel.

Mein Grundidee ist das ganze einfach immer mir als String zusammen zu bauen und dann in eine Datei zu schreiben, die ich mit .xml enden lasse.

Jetzt mein Frage: Gibt es eine bessere variante?
Also wo könnte ich mich mal einlesen bzw was ist bei der Erzeugung von XML's unter Umständen zu beachten und wie mache ich das ganze möglichs elegant?

Vielen Dank
Lg
Christian


----------



## Phash (31. Jul 2014)

ich benutz für sowas meist JSEFA JSefa - Quick Tutorial

Ich mach mir Objekte meiner Elemente, die ich in der XML haben mag (meist sinds ja tatsächlich die Entities, manchmal was anderes) 
und annotiere dann einfach 

oder halt damit: How to create XML file in Java – (DOM Parser)


----------



## knilch (31. Jul 2014)

[ups, war wohl zu wenig schnell... ;-)]
Hi,
Ich mach das immer so, dass ich eine Datenstruktur erstelle, welche das Model der DB abbildet. Beim Einlesen der Daten aus der DB wird dann die Struktur aufgefüllt.
Das Schreiben der Struktur in ein xml mach ich dann mit DOM. Damit hab ich am Anfang wesentlich mehr aufwand, bis das ganze so funktioniert wie es soll, aber dadurch bin ich weit flexibler für Erweiterungen und Änderungen.
Ich hatte es am Anfang auch mit Strings und concatenation gemacht. Bei kleinen XML- Files geht das schon, aber wenn diese komplex sind, wird das mit den Strings z.T. richtig mühsam.
Besonders wenn du viele verschiedene xml- Dateien mit unterschiedlichen Nodes und Attributs hast, bist du mit einer Datenstruktur und DOM wesentlich besser da, als wenn du das ganze mit String und fileReader machen würdest.


----------



## Chrizz993 (31. Jul 2014)

Hey! Super vielen Dank soweit.


Eine letzte Frage hätte ich noch:
Wenn ich die Tuple meiner DB einlesen, dann wir es so sein, dasss die Namen im XML genauso heißen werden wie sie in der DB heißen (Was ja auch sinn macht)

Ist es möglich bzw auch sinnvoll, dass ich mir die namen der Variablen automatisch aus der DB ziehe?

Sprich: Wenn das Attribut Alter in der DB heißt, kann ich dann irgendiwe die DB einlesen und automtisch dafür eine Variable vom Typ Int mit dem Namen Alter erzeugen?

Meine Befürchtung ist, das wenn ich 100  Variblen aus der DB einlesen muss, dieser erst einmal per Hand deklarieren muss und zuweisen muss.

Kann ich mir diesen Schritt irgendwie automatisieren?


----------



## Phash (31. Jul 2014)

Generell könntest du dir mit den Hibernate Tools das Datenbankmodell erzeugen lassen. (Reverse Engineeren)
 die MySQL Workbench kann das afaik auch.

Du kannst dir damit Java Klassen erzeugen lassen.

Ansonsten kannst du DB Tabellen auslesen, und dir die Spaltenamen da raus ziehen, das macht ja jedes SQL Anzeigetool genauso 
(Beispiel SQuirreL)

da hilft dir sicher das hier weiter:
DatabaseMetaData (Java Platform SE 7 ))


----------



## knilch (31. Jul 2014)

100 Variablen von hand, das ist doch to much. Wenn du unterschiedliche variablennamen in der DB hast, kannst du das mit einer HashMap implementieren. Da hast du key (variablenname der DB) und value (wert der DB-Variable).


----------



## Chrizz993 (31. Jul 2014)

@knilch:
Was für vorteile bringt mit eine HasMap im Vergleich zu einem 2 Dimensionalem Array?
Wirkt für mich ziemlich gleich. Ich muss doch jeweils einen Attributnamen und den entsprechenden Wert angeben.


----------



## knilch (31. Jul 2014)

> @knilch:
> Was für vorteile bringt mit eine HasMap im Vergleich zu einem 2 Dimensionalem Array?
> Wirkt für mich ziemlich gleich. Ich muss doch jeweils einen Attributnamen und den entsprechenden Wert angeben.


Klar kannst du auch ein 2D Array dafür einsetzten. Mit der HashMap hast du dabei die Vorteile von Collections um die Elemente zu sortieren etc. 
Im Moment brauchst du das vielleicht nicht, aber denke immer daran, dass eine Software lebt und Anpassungen wo auch immer gemacht werden müssen.


----------

