Java *.xml bearbeiten und zurückschreiben

limoneneis

Cadet 4th Year
Registriert
Okt. 2009
Beiträge
72
Hallo,

ich bin ganz neu unterwegs mit XML und habe eine Anfängerfrage. Ich habe den untenstehende code geschrieben und möchte in einer XML-File ein neues Element hinzufügen und in die XML zurückschreiben. D. h. XML(alt) --> Programm ausführen --> XML(neu) im Ordner \\dateien.

Wenn ich nun mein Programm ausführe ändert sich nichts an meiner Datei, wie kann ich das machen?

Code:
package probe;

import java.io.IOException;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.*;
import org.xml.sax.SAXException;

public class OsmManipulieren {

    private static Document doc;

    public OsmManipulieren() {
        DOMParser dom = new DOMParser();
        
        
        try {
            // Whitespaces unterdrücken
            dom.setFeature("http://apache.org/xml/features/dom/include-ignorable-whitespace", false);
            // keine Entity-Reference erstellen; Ausgabe der Entity-Referenz unterdrücken
            // dom.setFeature("http://apache.org/xml/features/dom/create-entity-ref-nodes", false);
            System.out.println("DOM-Implementierung: " + dom.getProperty("http://apache.org/xml/properties/dom/document-class-name"));
            dom.parse("dateien\\Buch.xml");
            doc = dom.getDocument();
            System.out.println("Strukturbaum der Datei dichter.xml vollstaendig aufgebaut\n");
        } catch (SAXException se) {
            System.out.println("Fehler beim Parsen: " + se.getMessage());
        } catch (IOException e) {
            System.out.println("E/A-Fehler: " + e.getMessage());
        }

    }

    public void hinzufuegen() {


        Node nodeName = doc.getFirstChild();

        System.out.println("Name: " + nodeName.getNodeName());

        if (nodeName != null) {
            Node n = nodeName;
            
            System.out.println("Name: " + n.getNodeName());


            Element nodeWerk = doc.createElement("Werk");
            Text text = doc.createTextNode("Text");
            nodeWerk.appendChild(text);


            nodeWerk.setAttribute("Art", "art");
            
            

            nodeWerk.setAttribute("Erscheinungsjahr", "1111");
            n.appendChild(nodeWerk);

        }
    }

    public static void main(String[] args) {

        OsmManipulieren o = new OsmManipulieren();
        o.hinzufuegen();
    }
}


Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Buch>
  <Titel>Wilhelm Tell</Titel>
  <Autor>
    <Vorname>Friedrich</Vorname>
    <Nachname>Schiller</Nachname>
    <!-- Nachfolgend erscheint ein Gemälde von Schiller -->
    <Img quelle="Schiller.jpg" hoehe="200" breite="100" />
  </Autor>
</Buch>
 
Ich habs jetzt nicht probiert, der Code zum Einlesen und Hinzufügen eines Elements sieht soweit in Ordnung aus. Aber ich sehe keine Codezeile, welche die veränderte XML-Struktur zurückschreibt. Die Veränderung passiert nur im Speicher.
 
Ganz ehrlich wenn du nicht gerade von einem Lehrer dazu verpflichtet wirst das so zu lösen, würde ich selbst einen DOMParser nicht mehr angreifen. Das ist die Sache einfach nicht wert.

Für solche Dinge wird eigentlich immer JAXB verwendet. Das ist ein Framework welches XML zu Objecten wandelt und Objecte zu XML. Das Wandlen selbst ich dann wenn ich auswendig nicht irre ein 3 Zeiler.
 
Zurück
Oben