import java.io.StringReader; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Node; import org.w3c.dom.bootstrap.DOMImplementationRegistry; import org.w3c.dom.ls.DOMImplementationLS; import org.w3c.dom.ls.LSSerializer; import org.xml.sax.InputSource; public class Main { public static String format(String xml) throws Exception { InputSource src = new InputSource(new StringReader(xml)); Node document = DocumentBuilderFactory.newInstance().newDocumentBuilder() .parse(src).getDocumentElement(); Boolean keepDeclaration = Boolean.valueOf(xml.startsWith("<?xml")); System.setProperty(DOMImplementationRegistry.PROPERTY, "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl"); DOMImplementationRegistry registry = DOMImplementationRegistry .newInstance(); DOMImplementationLS impl = (DOMImplementationLS) registry .getDOMImplementation("LS"); LSSerializer writer = impl.createLSSerializer(); writer.getDomConfig().setParameter("format-pretty-print", Boolean.TRUE); writer.getDomConfig().setParameter("xml-declaration", keepDeclaration); return writer.writeToString(document); } public static void main(String[] args) throws Exception { String unformattedXml = "<?xml version='1.0' encoding='UTF-8'?><QueryMessage\n" + " xmlns='http://www.SDMX.org/'\n" + " xmlns:query='http://www.SDMX.org/query'>\n" + " <Query>\n" + " <query:CategorySchemeWhere>\n" + " <query:AgencyID>ECB\n\n\n\n</query:AgencyID>\n" + " </query:CategorySchemeWhere>\n" + " </Query>\n\n\n\n\n" + "</QueryMessage>"; System.out.println(format(unformattedXml)); } }