DOC.Body.getElementById('i0116').value = 'test'
下一个打印:
def xmlNode = new XmlSlurper().parseText('<?xml version="1.0" encoding="utf-8"?><b>‰</b>')
println XmlUtil.serialize(xmlNode)
是否可以阻止将<?xml version="1.0" encoding="UTF-8"?>
<b>
‰
</b>
转换为‰
? ‰
文档什么也没说。
答案 0 :(得分:2)
我写了一个POC覆盖XmlSlurper.characters
来处理字符实体。还需要Apache commons StringEscapeUtils
将‰
转换回实体代码:
@Grab(group='commons-lang', module='commons-lang', version='2.6')
import org.apache.commons.lang.StringEscapeUtils as SE
import groovy.xml.XmlUtil
def parser = new XmlSlurper() {
void characters(char[] buffer, int start, int length) {
def entity = SE.escapeXml(buffer[start].toString())
super.characters entity.toCharArray(), start, entity.size()
}
}
def xml = parser.parseText '<?xml version="1.0" encoding="utf-8"?><b>‰</b>'
def serialized = SE.unescapeXml( XmlUtil.serialize(xml) )
assert '<?xml version="1.0" encoding="UTF-8"?><b>‰</b>\n' == serialized
注意这是处理单个字符,如果需要多字符处理,可能需要稍微调整一下。另请注意,在assert
中需要换行。它是由XmlUtil.serialize
不知道这是否是最佳方式。