GrailsXML转换器-编写CDATA

GrailsXML转换器-编写CDATA,grails,Grails,从GRAILS转换器写入CDATA是否可行?我需要在GRAILS应用程序中为一些XML元素编写CDATA。在调试器中运行grails代码后,似乎无法访问XMLStreamWriter。有什么建议吗?不可能通过xml转换器添加cdata。您可以使用StreamingMarkupBuilder: 或者,做一个很好的uglyhack,将groovy转换器定义中的“.chars”方法复制到代码中,编写chars unescaped: converter.startNode('property') co

从GRAILS转换器写入CDATA是否可行?我需要在GRAILS应用程序中为一些XML元素编写CDATA。在调试器中运行grails代码后,似乎无法访问XMLStreamWriter。有什么建议吗?

不可能通过xml转换器添加cdata。您可以使用StreamingMarkupBuilder:

或者,做一个很好的uglyhack,将groovy转换器定义中的“.chars”方法复制到代码中,编写chars unescaped:

converter.startNode('property')
converter.attribute('name', propertyName)
converter.startNode('value')
//converter.chars("<![CDATA[" + propertyValue + "]]>")
//as chars in xml converter go escaped, had to rewrite the method here: 
converter.checkState();
try {
    if (converter.writer.mode == TAG) {
        converter.writer.endStartTag();
    }
    converter.writer.mode = CONTENT;
    //we put the data unescaped:
    converter.writer.writer.unescaped().write("<![CDATA[" + propertyValue + "]]>");
}
catch (Exception e) {
    throw ConverterUtil.resolveConverterException(e);
}
//-----------------
converter.end()
converter.end()
converter.startNode('property'))
converter.attribute('name',propertyName)
converter.startNode('value')
//转换器字符(“”)
//当xml转换器中的字符转义时,必须在此处重写该方法:
converter.checkState();
试一试{
if(converter.writer.mode==标记){
converter.writer.endStartTag();
}
converter.writer.mode=内容;
//我们将数据放在未被覆盖的位置:
converter.writer.writer.unescaped().write(“”);
}
捕获(例外e){
抛出ConverterUtil.resolveConverterException(e);
}
//-----------------
converter.end()
converter.end()

无法通过xml转换器添加cdata。您可以使用StreamingMarkupBuilder:

或者,做一个很好的uglyhack,将groovy转换器定义中的“.chars”方法复制到代码中,编写chars unescaped:

converter.startNode('property')
converter.attribute('name', propertyName)
converter.startNode('value')
//converter.chars("<![CDATA[" + propertyValue + "]]>")
//as chars in xml converter go escaped, had to rewrite the method here: 
converter.checkState();
try {
    if (converter.writer.mode == TAG) {
        converter.writer.endStartTag();
    }
    converter.writer.mode = CONTENT;
    //we put the data unescaped:
    converter.writer.writer.unescaped().write("<![CDATA[" + propertyValue + "]]>");
}
catch (Exception e) {
    throw ConverterUtil.resolveConverterException(e);
}
//-----------------
converter.end()
converter.end()
converter.startNode('property'))
converter.attribute('name',propertyName)
converter.startNode('value')
//转换器字符(“”)
//当xml转换器中的字符转义时,必须在此处重写该方法:
converter.checkState();
试一试{
if(converter.writer.mode==标记){
converter.writer.endStartTag();
}
converter.writer.mode=内容;
//我们将数据放在未被覆盖的位置:
converter.writer.writer.unescaped().write(“”);
}
捕获(例外e){
抛出ConverterUtil.resolveConverterException(e);
}
//-----------------
converter.end()
converter.end()