我使用groovy.util.Node来操作树结构,而不是以XML格式存储树。
某些节点值不需要转义。
创建树的代码:
def nodeValue = '<![CDATA[you&me]]>'
Node rootNode = new Node(null, 'parent', [:], nodeValue)
rootNode.append(new Node(null, 'child', [:], nodeValue))
我已尝试使用XmlUtil.serialize
println groovy.xml.XmlUtil.serialize(rootNode) // & escaped to &
这是输出:
<?xml version="1.0" encoding="UTF-8"?><parent><![CDATA[you&me]]> <child><![CDATA[you&me]]></child>
</parent>
使用XmlNodePrinter:
def sw = new StringWriter()
new (new IndentPrinter(sw, '', false)).print(rootNode)
println sw.toString() // & escaped to &
输出:
<parent><![CDATA[you&me]]><child><![CDATA[you&me]]></child></parent>
为了避免CDATA转义,有人有一个常规的解决方案吗?
谢谢,
答案 0 :(得分:1)
您可以将StreamingMarkupBuilder
与mkp.yieldUnescaped
:
import groovy.xml.*
String xml = new StreamingMarkupBuilder().bind {
def nodeValue = { ->
mkp.yieldUnescaped '<![CDATA[you&me]]>'
}
parent {
nodeValue()
child {
nodeValue()
}
}
}
assert xml == '<parent><![CDATA[you&me]]><child><![CDATA[you&me]]></child></parent>'