# DOM DTD laden abschalten, Probleme mit Doctypes und PIs



## babuschka (30. Jan 2006)

Hallo.

Für ein XML-Editor-Projekt lade ich mit DOM XML-Dateien, die teilweise externe DTDs referenzieren. 

Mit DocBuilderFactory.setValidating(false) habe ich schon die Validierung abgeschaltet, trotzdem bekomme ich eine Fehlermeldung, wenn eine extern referenzierte DTD-Datei nicht gefunden werden kann.

Lässt sich dieses Verhalten abschalten? Der Editor soll unter anderem gerade dazu da sein, XML-Dateien "neue" DTDs zu verpassen.

Desweiteren kann ich aus der DOM keinen Doctype und keine ProcessingInstructions auslesen...

dom.getDoctype liefert immer "null", auch wenn ein Doctype spezifiziert ist.

Ein Node vom Typ ProcessingInstruction wird gefunden, aber sein Name und Value sind auch "null".

Ist das eine Einstellungssache in der DomBuilderFactory? Hier mein bisher verwendeter SourceCode: 


```
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		
dbf.setIgnoringComments(false); 
dbf.setValidating(false); 

docBuilder = dbf.newDocumentBuilder();
doc = docBuilder.parse(FilePointer);
```

Ich benutze Java 1.5.0, entwickle unter Eclipse (OS X/Linux).

Vielen Dank schon mal für eure Hilfe

MfG
Marcel


----------



## Bleiglanz (31. Jan 2006)

Vergiss es

DOM, JDOM, XOM, dom4j und wie die Bibliotheken alle heissen sind absolut UNGEIGNET um damit einen XML Editor zu schreiben, das ist IMHO völlig unmöglich

allein schon weil alle Entities, CDATAs usw. einfach verschwinden würden, das wär zum editieren irgendwie ungut

=> Lade das XML als normalen Text ...


----------



## Guest (2. Feb 2006)

Oh,

o.k.,  wahrscheinlich was das etwas missverständlich, der Editor ändert nicht beliebige XML-Dateien, sondern Sachen, die in einem vorliegenden XML-Format gespeichert sind. Um Entities, Notations und co. muß ich mich dabei zum Glück nicht kümmern, nur eben um referenzierte, aber teilweise "nicht anwesende" DTDs.

Nutze inzwischen SAX (da ich intern 'eh eine listenartige Datenstruktur und keinen Baum benutze), im XMLReader (also SAX2) gibt es eine Option, genau das Laden externer Grammatiken abzuschalten.

Falls jemand mit DOM noch mal auf ein ähnliches Problem stößt, man kann (zumindest theoretisch) den unter DOM liegenden SAX-Parser eben diese Attribute mitgeben (wobei bei mir ein einfaches setFeature nicht ausreicht und ich vorher wahrscheinlich explizit einen SAX-Parser vorgeben müsste, der das Feature unterstützt)


----------

