Mit XML speichern und wieder einlesen

Hans-Schmdt-Peter

Grünschnabel
Hallo,

und zwar geht es darum das ich eine Oberfläche habe über die ich 5 primitive Datentypen eingeben kann (String,float,int).
Nachdem ich diese eingegeben habe und denn Button "Speichern" gedrückt habe sollen diese in eine XML-Datei gespeichert werden.
Soweit so gut, dies klappt auch alles. Ich Speicher die Datenpakete als Objekt über denn XMLEncoder, dass Problem an der Sache ist allerdings das er für jedes Datenpaket eine neue XML-Datei erstellt was ich gerne vermeiden will.
Also er soll alle Datenpakete ine eine XML-Datei Speichern sonst haben ich am Ende um die 500 XML-Dateien im Verzeichnis was ich nicht möschte.

Das zweite Problem ist das einlesen. Dies klappt im einfachsten sinne auch ich lese die XML-Datein über denn XMLDecoder wieder eine und die Werte werden mit in den TextFeldern angezeigt, dafür muss ich allerdings genau denn Namen der XML-Datei angeben.
Ich möchste es allerdings so realisieren, dass mir die Daten(Namen) in einem Tree angezeigt werden und ich sie dann erst per Doppelklick öffne und die Werte dann erst in die TextFelder geschrieben werden. Man kann die Werte dann aber noch verändern und erneut abspeichern oder?

Ich weiss das sich so etwas mit einer SQL-Datenbank besser lösen lässt aber meine Chef will, dass ich das erstmal mit XML realisiere.

Ich hoffe ich habe meine Probleme einigermaßen verständlich beschrieben und hoffe es gibt hier ein paar die mir weiterhelfen können oder mich wenigstens auf die richtige fährte locken können.


Mit freundlichen Grüßen

Hans
 
JAXB 2.0 ist eine sehr komfortable Architektur zur Lösung deines Problems.
Ich zitier dir, was ich grad drüber geschrieben habe. Ich hoffe, ich bekomme mangels 'sauberer Formatierung' von keinem Admin jetzt eins übergezogen....
2.3.3.1 JAXB 2.0
JAXB (footnoteJava Architecture for XML Binding) dient zur Erzeugung eines
POJOs(1) aus einer XML(2)-Datei [11]. Dies funktioniert in drei Schritten:
1. Zunächst wird eine XSD(3)-Datei angelegt. Diese XSD-Datei, die im Gegensatz
zu DTD(4) selbst ebenfalls in XML verfasst wird, definiert den Syntax
einer beliebigen XML-Datei, die auf diesem Schema basiert. Der im Listing
2.2 vorgestellte Fertigungsplan basiert z.B. auf das in Listing A.3
abgedruckte Schema.
2. Mit Hilfe des JAXB-Befehls xjc werden aus der Schema-Datei Javaklassen
erzeugt und in ein entsprechendes Paket gelegt. So wurde unter anderem
mit dem Befehl
xjc -d ./../ -p xmlFertigungsfahrplan fertigungsfahrplan.xsd
aus der Schema-Datei fertigungsfahrplan.xsd (=Listing A.3) im Paket
xmlFertigungsfahrplan neben einer Steuerungsdatei (ObjectFactory) die
Klassen
(a) Einzelteile
(b) EinzelteilTypenType
(c) EinzelteilTypType
(d) Fertigungsfahrplan
(e) KontiType
(f) Los
(g) LosTypenType
(h) LosTypType
angelegt. Dabei wird jede Klasse mit den geforderten Attributen ausgestattet.
JAXB kennzeichnet dabei die Attribute mit protected und stattet
sie standardmäßig mit entsprechenden get/set-Methoden aus.
3. Erstellt man jetzt eine XML-Datei, die sich an die in der entsprechenden
Schema-Datei aufgestellten Konventionen hält, so kann diese Datei in Java
eingelesen (Listing A.2, Zeile 23) und daraus mit Hilfe eines sogenannten
Unmarshallers (Zeile 38-39) entsprechende Objekte kreiert werden (Zeile
1/40). Dabei überprüft JAXB die Datei automatisch auf ihren Syntax.
Andersherum können auch Javaobjekte mit Hilfe des Marshallers in eine XMLDatei
gespeichert werden. (...)

Weiter Informationen zu JAXB 2.0
können der verwendeten Literatur [11] entnommen werden.
-------------------------------------------------------------------------------------------------------------
(1)Plain Old Java Object - ein Javaobjekt ohne spezielle, aufgesetzte Techniken wie z.B. EJBs (Enterprise
Java Beans) [15]
(2)Extensible Markup Language - Ein Textformat, das Textblöcke ähnlich wie HTML mit Tags strukturiert
(3)XML-Schema-Definition
(4)Dokumenttypdefinition, Vorgänger von XSD

[11] @BOOK
{ title = {JAXB 2.0},
publisher = {Carl Hanser Verlag, München},
year = {2007},
author = {Samuel Michaelis; Wolfgang Schmiesing}
}


Das Auswählen der entsprechenden Dateien könntest du natürlich mit einem JFileChooser realisieren, den du mit einem XML-FileFilter versiehst.

Statt einer relationalen DB empfehle ich dir für das Speichern von Objekten eine objektorientierte DB, am besten DB4O (s.Google)

Konnte ich dir weiterhelfen?

Alexander
 
Zurück