# STAX Serializer (Formatierer)?



## nimo22 (3. Apr 2008)

Hallo,

ich hab mit Hilfe von STAX (Cursor-Variante) eine XML-Datei erzeugt..

Die Formatierung hab ich nun mit Hilfe von 

```
writer.writeDTD("\n"); //neuer Tag beginnt
writer.writeDTD("\t"); // neuer Sub-Tag beginnt
```

vorgenommen. 

Gibt es vielleicht eine schönere Variante, das XML-Dokument zu formatieren? 

Wenn ich das erzeugte XML-Dokument mit dem Browser öffne, 
dann ist es schön als Baumstruktur sichtbar, 
ABER wenn ich das XML-File mit nem normalen Texteditor öffne, dann steht alles auf einer Zeile. Muss ich mit der Codierung vielleicht noch was machen? Also so z.B.



```
...
XMLOutputFactory factory = XMLOutputFactory.newInstance();
            
// XMLStreamWriter -> Cursor-Version
XMLStreamWriter writer = factory.createXMLStreamWriter(new FileOutputStream(xmlFile),"UTF-8");
            
// write XML-Header
writer.writeStartDocument();
writer.writeDTD("\n");
..
```

Leider fügt er mir das "UTF-8" nicht im XML-Dokument hinzu, statt 


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

schreibt er mit das so:


```
<?xml version="1.0" ?>
```

Hat die Codierung was mit der Darstellung im Text-Editor zu tun?

Gibts ne Möglichkeit, wie bei SAX das mit mit nem schönen Transformer zu machen? 

Also ungefähr so:


```
...
serializer.setOutputProperty(OutputKeys.ENCODING, p_Encoding);
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
...
```

dank vorab.


----------



## nimo22 (3. Apr 2008)

hmm..nun hab ich das mit dem 


```
writer.writeDTD("\n"); //neuer Tag beginnt
writer.writeDTD("\t"); // neuer Sub-Tag beginnt
```

weggelassen. Anscheinend formatiert STAX das schon automatisch als XML-Struktur. Nur die Text-Version des XML-Doks is net schön: alles wird auf einer Zeile geschrieben :-(


Bei der Codierung hab ich nun mal "UTF-16" angegeben:

```
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(new FileOutputStream(xmlFile),"UTF-16");
```

STAX ignoriert dies, und nimmt automatisch "UTF-8", 
d.h. wenn ich keine Codierung angeb, dann steht da trotzdem "UTF-8" drinnen.

Bei der Iterator-Variante gibt es ne Methode .getEncodingScheme, aber leider keine Methode .setEncodingScheme.

Hat die Codierung Auswirkung auf die Anzeige im TXT-Editor?


----------



## nimo22 (3. Apr 2008)

Unter 

https://stax-utils.dev.java.net/nonav/javadoc/utils/index.html

gibts ne lib, mit dem man das Intendet hinbekommt.

"Class IndentingXMLEventWriter"

naja..was haltet ihr von der API, will das eigentlich ohne Einbinden von der LIB machen. Muss doch irgendwie funzen..


----------

