Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trycf/5e82e888385faa10af67298f88d3cab4 to your computer and use it in GitHub Desktop.
Save trycf/5e82e888385faa10af67298f88d3cab4 to your computer and use it in GitHub Desktop.
TryCF Gist
<cfscript>
unformattedXml = '<aaa><bbb ccc="ddd"><eee/></bbb></aaa>'
public string function prettyPrintByTransformer(required string xmlString, numeric indent=4, boolean ignoreDeclaration=true) {
var xmlAsStringReader = createObject("java", "java.io.StringReader").init(xmlString)
var src = createObject("java", "org.xml.sax.InputSource").init(xmlAsStringReader)
var document = createObject("java", "javax.xml.parsers.DocumentBuilderFactory").newInstance().newDocumentBuilder().parse(src)
var transformerFactory = createObject("java", "javax.xml.transform.TransformerFactory").newInstance()
var transformer = transformerFactory.newTransformer()
var outputKeys = createObject("java", "javax.xml.transform.OutputKeys")
transformer.setOutputProperty(outputKeys.ENCODING, "UTF-8")
transformer.setOutputProperty(outputKeys.OMIT_XML_DECLARATION, ignoreDeclaration ? "yes" : "no");
transformer.setOutputProperty(outputKeys.INDENT, "yes")
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", indent)
var out = createObject("java", "java.io.StringWriter").init()
var documentAsDomSource = createObject("java", "javax.xml.transform.dom.DOMSource").init(document)
var outAsStreamResult = createObject("java", "javax.xml.transform.stream.StreamResult").init(out)
transformer.transform(documentAsDomSource, outAsStreamResult)
return out.toString()
}
formattedXml = prettyPrintByTransformer(unformattedXml)
writeOutput("<pre>#encodeForHtml(formattedXml)#</pre>")
formattedXml = prettyPrintByTransformer(unformattedXml, 8, false)
writeOutput("<pre>#encodeForHtml(formattedXml)#</pre>")
</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment