Parsen von xml mit DOM, DOCTYPE-Element gelöscht wird

wie kommen dom mit java löscht doctype beim editieren von xml ?

habe diese xml-Datei :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE map[ <!ELEMENT map (station*) >
                <!ATTLIST station  id   ID    #REQUIRED> ]>
<favoris>
<station id="5">test1</station>
<station id="6">test1</station>
<station id="8">test1</station>
</favoris> 

meine Funktion ist sehr einfach :

public static void EditStationName(int id, InputStream is, String path, String name) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    DocumentBuilder builder = factory.newDocumentBuilder();
    Document dom = builder.parse(is);

    Element e = dom. getElementById(String.valueOf(id));
    e.setTextContent(name);
    //Write the DOM document to the file
    Transformer xformer = TransformerFactory.newInstance().newTransformer();
    FileOutputStream fos = new FileOutputStream(path);
    Result result = new StreamResult(fos);  
    Source source = new DOMSource(dom);


        xformer.setOutputProperty(
                OutputKeys.STANDALONE,"yes"     
                );

    xformer.transform(source, result);
}

es funktioniert, aber die doctype-Element gelöscht wird ! und ich habe gerade das ganze Dokument, aber ohne die doctype-Teil, der für mich wichtig ist, weil es mir erlaubt, abrufen von id !
wie halten wir den doctype ? warum macht man es löschen?
Ich habe versucht, viele Lösung mit outputkeys zum Beispiel oder omImpl.createDocumentType aber keiner von diesen hat funktioniert...

danke !

  • Ich überrascht, dass Sie überhaupt etwas bekommen; Ihre XML ist ungültig.
  • wirklich, aber wo ?
  • Zwei Dinge: 1) doctype (Karte) passt nicht zu Ihrem root-element (favoris). 2) Das element "station" ist nicht deklariert. Sie sollten eine element-Deklaration für die station, und ändern Sie dann "favoris" "Karte" (oder ändern Sie den doctype und element-Deklaration).
  • tut mir Leid, konnte Sie nur schreiben Sie es hier ? denn ich bin ein völlig fremder zu doc Art Dinge... :=)
  • vielleicht sowas in der Art ? <!DOCTYPE favoris[<!ELEMENT-favoris (Bahnhof*) > <!ELEMENT station (#PCDATA)> <!ATTLIST station id id #REQUIRED> ]>
  • +1 für die interessante Frage

InformationsquelleAutor KitAndKat | 2011-07-09
Schreibe einen Kommentar