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.