# XML für Einstellungen - welche Strategie verwenden?



## Antimon (25. Mrz 2007)

Hallo zusammen,

ich möchte verschiedene Einstellungen in einer XML-Datei abspeichern, den Aufbau könnte man vergleichen mit der Beschreibung eines Autohauses: Es gibt einen Besitzer, dessen Adresse gespeichert wird (genau ein Mal) und es gibt beliebig viele Autos, die wiederum verschiedene Eigenschaften haben.

Jetzt zerbreche ich mir den Kopf, wie es am sinnvollsten ist, eine solche XML-Beschreibung zu erstellen. Die Technik ist klar, nur gibt es da mehrere Möglichkeiten:
Entweder, ich erzeuge gleich die komplette XML-Datei (mit leeren Einträgen, also z.B. <Name></Name>), oder ich erstelle die Einträge, wenn Daten kommen (z.B. wenn ein Pächter Hans Meier kommt, füge ich die entsprechenden Tags hinzu).

Wenn ich das ganze Dokument gleich erstelle, habe ich den Vorteil, dass ich davon ausgehen kann, dass alle übergeordneten Knoten existieren, wenn ich irgend einen Kindknoten bearbeiten möchte (z.B. existiert <Pächter> wenn ich <Name> bearbeiten möchte, weil ein Name zu der Anschrift eines Pächters gehört), allerdings gibt es ein Problem, wenn dies mal nicht der Fall sein sollte (z.B. weil jemand von Hand in der Datei rumgepfuscht hat).

Lege ich dagegen nur bei Bedarf die Zweige an ist das fehlertoleranter - existiert mal ein Zweig nicht, wird das überprüft und notfalls ein neuer angelegt. Aber es ist auf jeden Fall aufwändiger, denn ich kann nie davon ausgehen dass übergeordnete Knoten existieren.

Was würdet Ihr mir von den oben genannten Möglichkeiten empfehlen - oder vielleicht was ganz anderes? Vielleicht mach ich mir auch einfach viel zu viel Gedanken und es ist eigentlich ganz einfach - aber momentan dreh ich mich nur im Kreis... :-/

Momentan verwende ich übrigens dom4j, xmlbeans habe ich aufgegeben - da war die doku viel zu schlecht. Gibts evtl. andere, für den Zweck bessere Libs?


----------



## André Uhres (25. Mrz 2007)

Vielleicht könnest du die Einstellungen in der Anwendung als JTree hinterlegen 
und dann das TreeModel einfach mit java.beans.XMLEncoder/XMLDecoder speichern/laden.



			
				Antimon hat gesagt.:
			
		

> ..weil jemand von Hand in der Datei rumgepfuscht hat..


Das sollte bei meinem Vorschlag allerdings tabu sein (bei einer komplizierten Struktur ist das eh nicht zu empfehlen)  :wink:
Höchstens der Entwickler selbst könnte sowas wagen um gewisse Korrekturen im Rahmen der Entwicklung vorzunehmen.


----------



## Antimon (25. Mrz 2007)

Also die Idee mit dem TreeModel ist sehr interessant - die behalte ich im Hinterkopf.

Jetzt ist halt die Frage - was mache ich wenn sich im Laufe der Zeit bei neuen Versionen des Programms am XML-Aufbau etwas ändert? Bin ich dann nicht am flexibelsten wenn ich den Dokumentaufbau im Programmcode hinterlege? Wenn dann ein Ast hinzukommt, wird der einfach angelegt, ansonsten müsste ich bei Updates eine spezielle Routine haben, die mir ein Mal den neuen Ast anlegt.

Wenn ich von der fertigen Datei ausgehe, könnte ich mir ja auch ein leeres Gerüst bauen und das dann immer kopieren, wenn ne neue Konfig erzeugt wird. Wäre natürlich relativ einfach und spart sicher ne Menge Code...

Oder gibts eventuell was ähnliches wie XMLBeans, welches anhand eines XSD-Dokumentes den Aufbau der Konfiguration kennt und fehlende Knoten einfach anlegen kann?

Mein größtes Problem ist nämlich momentan: Wie mache ich es wenn ich auf /Root/Knoten1/Knoten2/Knoten3/Knoten4 zugreifen möchte - aber weil die Konfig grade erst erstellt wurde, gibt es Knoten1-Knoten3 noch nicht... dann müsste ich diese Stück für Stück anlegen... oder gehts eleganter?


----------



## Wildcard (25. Mrz 2007)

Schreib eine xsd, lass dir die Datenklassen mit JaxB erzeugen und schreib dir ein TreeModel das mit den JaxB Klassen umgehen kann.
Dann kannst du einfach und korrekt serialisieren und deserialisieren.


----------



## Antimon (26. Mrz 2007)

JaxB... das schau ich mir mal an.

thx


----------

