# JDOM XMLOutputter getPrettyFormat()



## jdomBla (20. Sep 2012)

Hi Leute,

ich schreibe mit JDOM XML-Dateien folgendermaßen rauß:


```
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
FileOutputStream output = new FileOutputStream(path);
		
outputter.output(doc, output);
```

Ich dachte das Format.getPrettyFormat() bewirkt, dass in der XML-Datei
Zeilenumbrüche verwendet werden. Dies ist aber nicht der Fall. Alle meine
Texte stehen immer in einer Zeile, egal wie lang sie sind.

Wie genau kann ich denn nun bewirken, dass tatsächlich Zeilenumbrüche
verwendet werden?


----------



## SlaterB (20. Sep 2012)

da sonst keiner schreibt wage ich mich mal rein, ohne die entsprechenden APIs zu haben,
nach
XMLOutputter (JDOM v2.0.3)
wird in UTF-8 geschrieben, das könnte in einem simplen Windows-Editor böse aussehen,

anscheinend kann man bei output() auch System.out als Ziel angeben,
das wäre ein guter erster Test, wird in der Konsole umgebrochen?

für die Datei vielleicht FileWriter statt FileOutputStream


----------



## jdomBla (21. Sep 2012)

Hey,

jo in der Console wird umgebrochen.
Die XML-Dateien habe ich mir immer in 
Notepad++ angesehen und der weiß eigentlich
schon die gewissen Formatierungen zu interpretieren.

Die Änderung auf FileWriter hat leider nicht weitergeholfen.


----------



## SlaterB (21. Sep 2012)

der rechte Durchblick fehlt mir nach wie vor wie meist, aber Richtung Testen an Ideen:
such dir ein möglichst kurzes XML-Dokument aus, und schreibe den zugehörigen kompletten Text in Strings,
erstelle eine gleiche Datei auf Java-Weg,

hier zwei Varianten, eine UTF8, eine Cp1252 für Windows-Editor, dabei muss man auf Verwendung von newLine() achten,
nur das Encoding reicht nicht bei Ausgabe von "\n" aus Java-String, 
macht vielleicht für auch gar keinen Unterschied, 
nur für Wahl des Zeilenumbruch wichtig, \r\n dann meinetwegen,


```
public class Test {
    public static void main(String[] args)     throws Exception   {
        FileWriter w1 = new FileWriter("test1.txt");
        System.out.println(w1.getEncoding());
        write(w1);

        FileOutputStream o2 = new FileOutputStream("test2.txt");
        OutputStreamWriter w2 = new OutputStreamWriter(o2, "Cp1252");
        System.out.println(w2.getEncoding());
        write(w2);
    }

    private static void write(Writer w)     throws Exception   {
        BufferedWriter b = new BufferedWriter(w);
        b.write("<root>");
        b.newLine();
        b.write("</root>");
        b.close();
    }
}
```

Notepad++ liest bei mir beides sorglos ein, besonders natürlich den Standard UTF8, deswegen weiß ich nicht so recht, wohin das führen soll,

jedenfalls erstelle auf diesem Weg zwei Dateien und noch von deinem Formatter eine, alle möglichst mit demselben Text,
das macht es einfacher zu vergleichen, wobei letzlich vielleicht einmal Zeilenumbruch-Zeichen anzuschauen sind,
und dann untersuche die Dateien, schaue sie mit Windows-Editor an, mit Notepad++, mit Java als Reader in verschiedenen Encodings eingelesen, 
ultimativ schließlich als FileInputStream eingelesen und jedes Byte angeschaut, Unterschiede zwischen den Dateien verglichen

oder lade einfach eine erstellte Textdatei hier hoch, vielleicht spannend genug dass ich mir das anschaue 
(ohne zu behaupten dass ich es garantiert löse)
(und natürlich andere nie ausgenommen, gerne kann auch jemand in 2 Zeilen die Lösung posten  )


ist einfach kein Zeilenumbruch da, obwohl in der Konsole so ausgegeben, oder welches Zeichen sollte Notepad++ überfordern?..


----------

