import javax.xml.transform.*; import javax.xml.transform.stream.*; import java.io.*; import java.util.*; import java.nio.file.Paths; import java.nio.file.Files; import java.nio.charset.StandardCharsets; import java.nio.charset.Charset; public class FormatXml{ public static String formatXml(String input, int indent) { try { Source xmlInput = new StreamSource(new StringReader(input)); StringWriter stringWriter = new StringWriter(); StreamResult xmlOutput = new StreamResult(stringWriter); TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setAttribute("indent-number", indent); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(xmlInput, xmlOutput); return xmlOutput.getWriter().toString(); } catch (Exception e) { throw new RuntimeException(e); // simple exception handling, please review it } } public static String prettyFormat(String input) { return formatXml(input, 2); } public static String readFile(String path, Charset encoding) throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); return new String(encoded, encoding); } public static void main(String[] args){ try{ if (args != null && args.length != 1){ System.out.println("Usage:java FormatXml xmlStr"); System.exit(-1); } String xmlStr = readFile(args[0], StandardCharsets.UTF_8); System.out.println(prettyFormat(xmlStr)); }catch(Exception e){ e.printStackTrace(); } } }