PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java und XML Config Datei


Gast
2006-10-18, 00:11:01
Hi :)

Ich hab ein Java Programm, in dem man einige Sachen einstellen kann. Z.B. die Startseite. Damit das Programm über mehrere Starts hinweg die Einstellungen behält, möchte ich die Sachen in einer XML Datei speichern. Jetzt frage ich mich, wie ich das am besten anstelle. Im Moment habe ich das "Per Hand"; mit DOM einen Dokumentenbaum angepasst lesen und schreiben, also so:


<config>
<startseite>www.forum-3dcenter.de</startseite>
</config>


und dann in Java mit DOM / XPath den Wert auslesen:


DOMImplementation domImpl = new DOMImplementationImpl();
Document doc = domImpl.createDocument(null, "config", null);
Element root = doc.getDocumentElement();
NodeIterator niSensor = XPathAPI.selectNodeIterator(doc, "/config/startseite");


Und zum schreiben dann entsprechend per XPath den Baum updaten und dann das ganze DOM wieder per Serializer auf die Platte schreiben.

Ich frage mich, ob man das auch besser machen kann. Habt ihr einen Vorschlag, was man benutzen kann, um das zu vereinfachen oder zu automatisieren? :)

b) So etwas wie DataBinding benutzen (ist das für diesen Fall sinnvoll?)

Gast
2006-10-18, 00:13:25
ups, a) vergessen: soll ich auf JDOM umsteigen?

mithrandir
2006-10-18, 08:04:01
Warum reichen nicht einfach Properties aus, da musst du gar nichts selber implementieren, ausser den load() und store() Aufruf?
-> http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html

Dein Code für DOM/XPath scheint schon so zu passen. Aus welchem Grund glaubst du, das eine andere Umsetzung besser wäre - gibt's Probleme?

Gast
2006-10-18, 11:52:53
Warum reichen nicht einfach Properties aus, da musst du gar nichts selber implementieren, ausser den load() und store() Aufruf?
-> http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html

Dein Code für DOM/XPath scheint schon so zu passen. Aus welchem Grund glaubst du, das eine andere Umsetzung besser wäre - gibt's Probleme?

Hallo Mithrandir,

Properties reichen nicht, weil sie nicht hierarchisch sind. Es soll schon XML sein, unter anderem auch weil man es dann mit einem XML-Editor bearbeiten kann. Die echte XML Datei hat mind. 100 Properties und das ist besser wartbar, in Bezug auf Relationen ("Fremdschlüssel") und Struktur. Probleme gibts eigentlich auch nicht, ich frage mich einfach nur ob man es statt "gut" auch "besser" machen kann! ;)

Weil wenn man sich die ganze Sache anschaut: ich mach eine Menge Handarbeit. Da frage ich mich doch, ob man eine Datei wie folgt:


<config>
<class>
<a>123</a>
<b>text</b>
<c>mein.paket.OtherClass</c>
</class>
</config>


automatisch mit sowas "mappen" kann:


class Class
{
int a;
String b;
OtherClass c;
}


Dann könnte eine schlaue Software Daten aus der XML lesen, sie mappen auf Java Objekte, und dann wieder automatisch schreiben. Ich glaube das ist dann DataBinding, aber ich weiss nicht welchen Standard / Library genau ich nehmen soll, und ob das auch eben genau das macht was ich will. Deshalb frage ich hier nach ob jemand schon mal genau dieses Problem hatte.

Shink
2006-10-18, 13:48:41
Hallo Mithrandir,

Properties reichen nicht, weil sie nicht hierarchisch sind. Es soll schon XML sein, unter anderem auch weil man es dann mit einem XML-Editor bearbeiten kann. Die echte XML Datei hat mind. 100 Properties und das ist besser wartbar, in Bezug auf Relationen ("Fremdschlüssel") und Struktur. Probleme gibts eigentlich auch nicht, ich frage mich einfach nur ob man es statt "gut" auch "besser" machen kann! ;)

Weil wenn man sich die ganze Sache anschaut: ich mach eine Menge Handarbeit. Da frage ich mich doch, ob man eine Datei wie folgt:


<config>
<class>
<a>123</a>
<b>text</b>
<c>mein.paket.OtherClass</c>
</class>
</config>


automatisch mit sowas "mappen" kann:


class Class
{
int a;
String b;
OtherClass c;
}


Dann könnte eine schlaue Software Daten aus der XML lesen, sie mappen auf Java Objekte, und dann wieder automatisch schreiben. Ich glaube das ist dann DataBinding, aber ich weiss nicht welchen Standard / Library genau ich nehmen soll, und ob das auch eben genau das macht was ich will. Deshalb frage ich hier nach ob jemand schon mal genau dieses Problem hatte.

So - da gäbs jetzt ein paar Vorschläge:
1) JDOM: Viel einfacher.
2) Apache Commons-Configuration. Einfach mal anschauen. Für viele Einsatzzwecke bekommt man da gar nicht mit, in welcher Dateiformat man da schreibt/liest.
3) XStream: Liefert mehr oder weniger das, was du in deinem letzten Post geschrieben hast.