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>有没有办法防止将‰转换成‰?XmlSlurper文档什么也没说。
发布于 2016-08-29 21:17:00
我编写了一个覆盖XmlSlurper.characters的POC来处理字符实体。将‰转换回实体代码也需要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添加的
不过,我不知道这是不是最好的方法。
https://stackoverflow.com/questions/39205695
复制相似问题