# StAX formatierung oder auch newline!



## Aimee (20. Nov 2006)

Huhu,

ich habe mir im Internet schon die Finger wund gesucht nach einer Möglichkeit beim schreiben einer XML-Datei das Ergebnis formatiert auszugeben.
Heißt wenn man die Datei öffnet das es auf Anhieb wie eine XML-Datei aussieht. Sozusagen nach jedem > ein newline..

Aber es scheint so etwas nicht in StAX zu geben.. Oder doch???? Ich möchte StAX benutzen einfach weil es super schnell ist was lesen und schreiben betrifft. Habe eine enorme Datenmenge die da ständig rein und raus geht.

Wenn ich mir die XML-Dateien übern IE anschaue sieht man es formatiert aber nicht wenn man es normal öffnet..

Ist da jemand schon ein Schritt weiter und hat heraus gefunden wie man die Datei mit StAX formatiert schreibt??

Mein Code zum schreiben einer Datei:


```
try
        {
            OutputStreamWriter ow = new OutputStreamWriter(
                    new FileOutputStream(filepath), "UTF-8");
            XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
            XMLEventWriter writer = outputFactory.createXMLEventWriter(ow);
            
            XMLEventFactory eventFactory = XMLEventFactory.newInstance();

            XMLEvent header = eventFactory.createStartDocument();
            XMLEvent startRoot = eventFactory.createStartElement("", "", type);

            writer.add(header);
            writer.add(startRoot);

            for (int i = 0; i < data.size(); i++)
            {
                ArrayList a = (ArrayList) data.get(i);
                ArrayList b = (ArrayList) a.get(0);
                XMLEvent startElem = eventFactory.createStartElement("", "", (String) b.get(1).toString());
                writer.add(startElem);

                for (int j = 1; j < a.size(); j++)
                {
                    XMLEvent Attribut = null;
                    ArrayList a2 = (ArrayList) a.get(j);
                    if (a2.get(1) != null)
                    {
                        Attribut = eventFactory.createAttribute((String) a2.get(0).toString(), (String) a2.get(1).toString());
                    }
                    else
                    {
                        Attribut = eventFactory.createAttribute((String) a2.get(0).toString(), "");
                    }
                    writer.add(Attribut);
                }

                XMLEvent endElem = eventFactory.createEndElement("", "", (String) b.get(1).toString());
                writer.add(endElem);
            }
            XMLEvent endRoot = eventFactory.createEndElement("", "", type);
            XMLEvent endDocument = eventFactory.createEndDocument();

            writer.add(endRoot);
            writer.add(endDocument);
            writer.close();

        }
        catch (XMLStreamException e)
        {
            e.printStackTrace();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
```
Das ich Attribute statt Elemente verwende ist Absicht :wink:


----------



## Aimee (21. Mai 2007)

Huhu,

ich hole das noch einmal hoch weil ich die Lösung schon lange habe und vielleicht jemanden anderen helfen könnten.

 


```
try
        {
            OutputStreamWriter ow = new OutputStreamWriter(
                    new FileOutputStream(filepath), prop.utf8);
            XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
            XMLEventWriter writer = outputFactory.createXMLEventWriter(ow);
            
            XMLEventFactory eventFactory = XMLEventFactory.newInstance();
            XMLEvent end = eventFactory.createDTD("\n");
            XMLEvent tab = eventFactory.createDTD("\t");

            XMLEvent header = eventFactory.createStartDocument(); // .createStartDocument("utf-16")
            XMLEvent startRoot = eventFactory.createStartElement(prop.empty, prop.empty, type);

            writer.add(header);
            writer.add(end);
            writer.add(startRoot);
            writer.add(end);
            for (int i = 0; i < data.size(); i++)
            {
                ArrayList a = (ArrayList) data.get(i);
                ArrayList b = (ArrayList) a.get(0);
                XMLEvent startElem = eventFactory.createStartElement(prop.empty, prop.empty, (String) b.get(1).toString());
               writer.add(tab);
                writer.add(startElem);

                for (int j = 1; j < a.size(); j++)
                {
                    XMLEvent Attribut = null;
                    ArrayList a2 = (ArrayList) a.get(j);
                    if (a2.get(1) != null)
                    {
                        Attribut = eventFactory.createAttribute((String) a2
                                .get(0).toString(), (String) a2.get(1)
                                .toString());
                    }
                    else
                    {
                        Attribut = eventFactory.createAttribute((String) a2
                                .get(0).toString(), prop.empty);
                    }
                    writer.add(Attribut);
                }

                XMLEvent endElem = eventFactory
                        .createEndElement(prop.empty, prop.empty, (String) b.get(1).toString());
                writer.add(endElem);
                writer.add(end);
            }
            XMLEvent endRoot = eventFactory.createEndElement(prop.empty, prop.empty, type);
            XMLEvent endDocument = eventFactory.createEndDocument();

            writer.add(endRoot);
            writer.add(end);
            writer.add(endDocument);
            writer.add(end);
            writer.close();

        }
        catch (Exception e)
        {
        }
```


----------



## vogella (8. Aug 2007)

Danke, war wirklich hilfreich.


----------

