Ako sformátovať XML reťazec do nádhernej sformátovanej podoby?
Použijeme XSLT transformátor! (Ehm.)
public static String prettyPrintXml(String xml) throws TransformerException {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
StreamResult result = new StreamResult(new StringWriter());
StreamSource source = new StreamSource(new StringReader(xml));
transformer.transform(source, result);
String prettifiedXml = result.getWriter().toString();
return prettifiedXml;
}
Základom sú dve vlastnosti:
- zapnutie výstupnej vlastnosti (output property) pre odsadzovanie (indent)
- zapnutie výstupnej vlastnosti pre počet medzier v odsadzovaní (
indent-amount
). Ak táto vlastnosť nie je nastavená, XML bude sformátované do riadkov, ale bez odsadzovania príjemného pre ľudské oko.
Finta spočíva v transformácii výsledku pomocou prázdnej XSLT šablóny do reťazcového StringWriter
a, z ktorého si vyzdvihneme výsledok.