# Definitionen auslesen und Encoding



## HeRaider (3. Dez 2007)

Hallo,

ich hoffe, dass ihr mir weiterhelfen könnt. Ich lese gerade ein XML-Dokument mittels XMLEventReader ein. Soweit funktioniert eigentlich auch alles ganz gut. 2 Zeilen des Dokuments bereiten mir hierbei aber noch Probleme.


```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTMLDEF SYSTEM "DocDef.dtd"[]>
```

Gibt es eine Möglichkeit diese Daten mit dem XMLEventReader einzulesen und wenn ja wie? Falls nein, gibt es eine andere (sparsame) Möglichkeit?

Zudem habe ich noch ein 2. Problem. Ich will nachdem ich die Datei bearbeitet habe eine neue XML-Datei schreiben und diese als UTF-8 speichern. Das ganze sieht in etwa so aus:


```
fos = new FileOutputStream(path);
outputFactory = XMLOutputFactory.newInstance();
writer = outputFactory.createXMLEventWriter(fos, "UTF-8");
```

Eigentlich müsste die Datei doch nun im UTF-8 Format gespeichert werden. Hat jemand vielleicht eine Idee warum das nicht funktioniert?


----------



## HeRaider (4. Dez 2007)

OK hab jetzt was gefunden um die Zeile 


```
<?xml version="1.0" encoding="UTF-8"?>
```

einzulesen. Ich habe einfach meinen Event in ein StartDocument konvertiert und dann dort die Daten ausgelesen. Mit DTD geht das leider nicht. Dabei wird versucht die ganze DTD zu lesen und nicht nur die Definition in der XML Datei. Ich brauche aber nur 


```
<!DOCTYPE HTMLDEF SYSTEM "DocDef.dtd"[]>
```

Mein Encodingproblem besteht übrigens noch immer. Kann mir da bitte jemand weiterhelfen?


----------



## HeRaider (7. Dez 2007)

Ok ich hab zwar keine Ahnung wieso aber plötzlich funktioniert das mit dem Encoding obwohl ich nichts an diesem Teil des Programms geändert habe. Ich komme aber immer noch nicht an die Doctype Deklaration dran. Hat wirklich keiner eine Idee wie ich diese auslesen kann? Oder braucht ihr mehr Informationen dazu?


----------



## HeRaider (13. Dez 2007)

Ok habs jetzt einfach so gelöst:


```
XMLInputFactory inp = XMLInputFactory.newInstance();
XMLStreamReader xsr = inp.createXMLStreamReader(path, new FileInputStream(path));
int xevent = xsr.getEventType();
			
while(xsr.hasNext())
{ 
    xevent = xsr.next();
				
    if(xevent == XMLStreamConstants.DTD)
    {
        dtd = xsr.getText();
        xsr.close();
    }
}
```
Hätte es zwar sehr gerne mit dem XMLEventReader gemacht aber mit dem geht das scheinbar nicht.


----------

