Manipuliertes XML abspeichern

phanimade

Grünschnabel
Hallo,

ich bin ganz neu hier und etwas erschlagen von den Ausmassen dieses Forums. Leider habe ich keine Suchfunktion so auf die Schnelle gefunden. Hoffe, das Thema gibt es nicht schon...

Aaaaalso:

Ich bin gerade dabei ein Adressbuch auf XML Basis mit Eclipse zu programmieren. Ich kann bereits ein neues XML Adressbuch anlegen und auch neue Kontakte hinzufuegen. Was mir noch fehlt ist die Bearbeitung eines bestehenden Kontaktes. Da komme ich in meinen Ideen leider nicht weiter und hoffe auf einen Tipp, wie ich das Umsetzen kann.

Ich benutze dom4j und zum Schreiben von XML Files die Klasse XMLWriter. Aber diese Klasse schreibt mir ja gleich ein komplett neues Dokument, oder?

Ich weiss nicht genau, wie ins Detail ich jetzt gehen muss. Ich versuch mal einen groben Ueberblick zu verschaffen:

Das XML Dokument ist verkuerzt wie folgt aufgebaut:

<adressbuch>
<vcard id= "0">
<person>
...
</person>
</vcard>
<vcard id= "1">
...
</vcard>
</adressbuch>

Um den zu bearbeitenden Kontakt wollte ich mit XPath identifizieren. Da weiss ich zwar auch nicht genau wie, aber das bekomm ich sicher noch hin.

Der Kontakt befindet sich zum Zeitpunkt des Bearbeitens in einem geoeffneten (also geparsten) XML File.

Meine Frage ist nun konkret: Kann ich den folgenden Code, den ich fuer das Anlegen eines neuen Kontaktes benutze, auch fuer das Ueberspeichern des bearbeiteten "alten" Kontaktes verwenden? Oder habt ihr eine andere Idee, wie ich das machen kann?

Code zum Speichern:

public void writeNewData() throws IOException, DocumentException{

XMLWriter writer = new XMLWriter(new FileWriter (file), new OutputFormat(null, false, "ISO-8859-1"));
writer.write(document);
writer.close();

}


zur Info: document ist eine Instanzvariable. Diese enthaelt die XML Baumstruktur und ggf. die neu geschriebenen Inhalte. file ist ebenfalls eine Instanzvariable und enthaelt den Pfad der XML- Datei.

So... Ich hoffe, ich konnte mein Problem einigermassen deutlich machen und hoffe auf hilfreiche Tipps.

Vielen Dank schon mal und schoene Gruesse
Rebecca
 
Hallo,

also so wie ich das verstanden habe, müsste es so funktionieren. Also so wird dein XML-Dokument immer neu geschrieben, also die alte Datei überschrieben.

MFG

zEriX
 
Ja eben, das Dokument wird dann neu geschrieben. Kann man das denn nicht irgendwie umgehen? Kann mir vorstellen, dass es zu Performance Einbussen kommt, wenn ich jedesmal das Dokument neu schreibe... Ist natuerlich die Frage, ob sich diese bei nurText so bemerkbar machen.
 
Hi,

ich sehe das wie zEriX. Du kannst XML nur dokumentorientiert abspeichern. Wenn Du mit Xpath suchst, wird auch das gesamte Dokument geparst, wie soll auch sonst was gefunden werden. Es gibt ja keine zusätzlichen Informationen, wie Indizes.

Das gleiche gilt für das Schreiben. Auch hier gibt es keinen "satzorientiertes" Schreiben, wie in anderen Programmiersprachen. Es wird das gesamte Dokument verarbeitet.

Wenn Du allerdings die Performance ansprichst. An wievielen Tausend Einträgen hättest Du denn gedacht? Wenn am Ende des Programms immer komplett gespeichert wird, geschieht das sicherlich recht fix.

Tschau Lutz
 
Achso... Ok... Damit kann ich auf jeden Fall leben. Und das ist wohl auch wahr, dass ich mit den paar Eintraegen, die passieren, wohl kaum einen Prozessor zum qualmen bring... Dann werde ich das so machen.

Danke auf jeden Fall :-)
 
Zurück