Skip to content

Commit 6ad2353

Browse files
convert node to string with correct whitespace and CDATA handling
1 parent e6c4de1 commit 6ad2353

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

sqldev/src/main/java/org/utplsql/sqldev/model/XMLTools.xtend

+31-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
*/
1515
package 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
1722
import javax.xml.xpath.XPathConstants
1823
import javax.xml.xpath.XPathFactory
1924
import 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

Comments
 (0)