Pretty print XML
This commit is contained in:
parent
00fec096cb
commit
67e7a642db
@ -23,7 +23,8 @@ class Server(private val views: Views, private val conf: StarterConfig) {
|
|||||||
ctx.formParam(it.name) != null
|
ctx.formParam(it.name) != null
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.result(views.pom(deps, name, basePackage))
|
val generatedPom = views.pom(deps, name, basePackage)
|
||||||
|
ctx.result(prettyPrintXml(generatedPom))
|
||||||
ctx.contentType("text/xml")
|
ctx.contentType("text/xml")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
49
src/main/java/starter/Utils.kt
Normal file
49
src/main/java/starter/Utils.kt
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package starter
|
||||||
|
|
||||||
|
import org.w3c.dom.Document
|
||||||
|
import org.w3c.dom.NodeList
|
||||||
|
import org.xml.sax.InputSource
|
||||||
|
import java.io.ByteArrayInputStream
|
||||||
|
import java.io.StringWriter
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory
|
||||||
|
import javax.xml.transform.OutputKeys
|
||||||
|
import javax.xml.transform.TransformerFactory
|
||||||
|
import javax.xml.transform.dom.DOMSource
|
||||||
|
import javax.xml.transform.stream.StreamResult
|
||||||
|
import javax.xml.xpath.XPathConstants
|
||||||
|
import javax.xml.xpath.XPathFactory
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
@see https://stackoverflow.com/a/33541820
|
||||||
|
*/
|
||||||
|
fun prettyPrintXml(xml: String, indent: Int = 4): String {
|
||||||
|
// Turn xml string into a document
|
||||||
|
val document: Document = DocumentBuilderFactory.newInstance()
|
||||||
|
.newDocumentBuilder()
|
||||||
|
.parse(InputSource(ByteArrayInputStream(xml.encodeToByteArray())))
|
||||||
|
|
||||||
|
// Remove whitespaces outside tags
|
||||||
|
document.normalize()
|
||||||
|
val xPath = XPathFactory.newInstance().newXPath()
|
||||||
|
val nodeList = xPath.evaluate("//text()[normalize-space()='']",
|
||||||
|
document,
|
||||||
|
XPathConstants.NODESET) as NodeList
|
||||||
|
for (i in 0 until nodeList.length) {
|
||||||
|
val node = nodeList.item(i)
|
||||||
|
node.parentNode.removeChild(node)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup pretty print options
|
||||||
|
val transformerFactory = TransformerFactory.newInstance()
|
||||||
|
transformerFactory.setAttribute("indent-number", indent)
|
||||||
|
val transformer = transformerFactory.newTransformer()
|
||||||
|
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8")
|
||||||
|
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")
|
||||||
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes")
|
||||||
|
|
||||||
|
// Return pretty print xml string
|
||||||
|
val stringWriter = StringWriter()
|
||||||
|
transformer.transform(DOMSource(document), StreamResult(stringWriter))
|
||||||
|
return stringWriter.toString()
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user