format XML

やりたいこと

<tag><tag>test</tag></tag>

のような文字列を

<tag> <tag>test</tag></tag>

のように変換したい。

方法

やり方は諸説あるようですが、いくつかを組み合わせて以下のようにしました。

static public String formatXml(String xml) { try { InputStream bais = new ByteArrayInputStream(xml.getBytes("utf-8")); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(bais); doc.setXmlStandalone(true); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(doc); transformer.transform(source, result); String xmlString = result.getWriter().toString(); String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; return header + "\n" + xmlString; } catch (Exception e) { e.printStackTrace(); } return xml; }