Java: IndentingXMLStreamWriter alternative? Java: IndentingXMLStreamWriter alternative? xml xml

Java: IndentingXMLStreamWriter alternative?


Instead of com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter use com.sun.xml.txw2.output.IndentingXMLStreamWriter that can be found in:

<dependency>    <groupId>org.glassfish.jaxb</groupId>    <artifactId>txw2</artifactId>    <version>2.2.11</version></dependency>


Just expanding on Michael Kay's answer ( https://stackoverflow.com/a/10108591/2722227 ).

maven dependencies:

<dependency>            <groupId>net.sf.saxon</groupId>            <artifactId>Saxon-HE</artifactId>            <version>9.6.0-5</version></dependency>

java code:

import java.io.OutputStream;import net.sf.saxon.Configuration;import net.sf.saxon.s9api.Processor;import net.sf.saxon.s9api.SaxonApiException;import net.sf.saxon.s9api.Serializer;import net.sf.saxon.s9api.Serializer.Property;public class Main {    public static void main(String[] args) throws Exception {        OutputStream outputStream = System.out;        writeXmlDocument(outputStream);    }    private static void writeXmlDocument(OutputStream outputStream){        Configuration config = new Configuration();        Processor processor = new Processor(config);        Serializer serializer = processor.newSerializer();        serializer.setOutputProperty(Property.METHOD, "xml");        serializer.setOutputProperty(Property.INDENT, "yes");        serializer.setOutputStream(outputStream);        try {            XMLStreamWriter writer = serializer.getXMLStreamWriter();            try {                writer.writeStartDocument();                {                    writer.writeStartElement("root_element_name");                    {                        writer.writeStartElement("child_element");                        writer.writeEndElement();                    }                    writer.writeEndElement();                }                writer.writeEndDocument();                writer.flush();                writer.close();            } catch (XMLStreamException e) {                e.printStackTrace();            }        } catch (SaxonApiException e) {            e.printStackTrace();        }    }}


If other suggestions don't work, you can get an indenting XMLStreamWriter from Saxon like this:

Processor p = new net.sf.saxon.s9api.Processor();Serializer s = p.newSerializer();s.setOutputProperty(Property.METHOD, "xml");s.setOutputProperty(Property.INDENT, "yes");s.setOutputStream(....);XMLStreamWriter writer = s.getXMLStreamWriter();

One advantage is that this allows you a lot of control over the serialization using other serialization properties.