1414 */
1515package org.utplsql.sqldev.model
1616
17+ import java.io.StringWriter
18+ import javax.xml.transform.OutputKeys
19+ import javax.xml.transform.TransformerFactory
20+ import javax.xml.transform.dom.DOMSource
21+ import javax.xml.transform.stream.StreamResult
1722import javax.xml.xpath.XPathConstants
1823import javax.xml.xpath.XPathFactory
1924import org.w3c.dom.Node
@@ -34,4 +39,29 @@ class XMLTools {
3439 val Node node = expr. evaluate(doc, XPathConstants . NODE ) as Node
3540 return node
3641 }
37- }
42+
43+ def void trimWhitespace (Node node ) {
44+ val children = node. childNodes
45+ for (i : 0 .. < children. length) {
46+ val child = children. item(i)
47+ if (child. nodeType == Node . TEXT_NODE ) {
48+ child. textContent = child. textContent. trim
49+ }
50+ trimWhitespace(child);
51+ }
52+ }
53+
54+ def nodeToString (Node node , String cdataSectionElements ) {
55+ node. trimWhitespace
56+ val writer = new StringWriter ()
57+ val factory = TransformerFactory . newInstance(). newTransformer()
58+ factory. setOutputProperty(OutputKeys . OMIT_XML_DECLARATION , " yes" )
59+ factory. setOutputProperty(OutputKeys . INDENT , " yes" )
60+ factory. setOutputProperty(" {http://xml.apache.org/xslt}indent-amount" , " 3" );
61+ factory. setOutputProperty(OutputKeys . CDATA_SECTION_ELEMENTS , cdataSectionElements)
62+ factory. transform(new DOMSource (node), new StreamResult (writer))
63+ val result = writer. toString()
64+ val fixedResult = result. replaceAll(' ' ' <!\[ CDATA\[\s *\]\] >' ' ' ," " )
65+ return fixedResult
66+ }
67+ }
0 commit comments