Java: How to Indent XML Generated by Transformer
indentation, java, transform, xml
Solution
You need to enable 'INDENT' and set the indent amount for the transformer:
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Update:
Reference : How to strip whitespace-only text nodes from a DOM before serialization?
(Many thanks to all members especially @marc-novakowski, @james-murty and @saad):
Problem
I'm using Java's built in XML transformer to take a DOM document and print out the resulting XML. The problem is that it isn't indenting the text at all despite having set the parameter "indent" explicitly. sample code ``` public class TestXML { public static void main(String args[]) throws Exception { ByteArrayOutputStream s; Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Transformer t = TransformerFactory.newInstance().newTransformer(); Element a,b; a = d.createElement("a"); b = d.createElement("b"); a.appendChild(b); d.appendChild(a); t.setParameter(OutputKeys.INDENT, "yes"); s = new ByteArrayOutputStream(); t.transform(new DOMSource(d),new StreamResult(s)); System.out.println(new String(s.toByteArray())); } } ``` result ``` <?xml version="1.0" encoding="UTF-8" standalone="no"?><a><b/></a> ``` desired result ``` <?xml version="1.0" encoding="UTF-8" standalone="no"?> <a> <b/> </a> ``` Thoughts?