14
14
*/
15
15
package org.utplsql.sqldev.model
16
16
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
17
22
import javax.xml.xpath.XPathConstants
18
23
import javax.xml.xpath.XPathFactory
19
24
import org.w3c.dom.Node
@@ -34,4 +39,29 @@ class XMLTools {
34
39
val Node node = expr. evaluate(doc, XPathConstants . NODE ) as Node
35
40
return node
36
41
}
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