jav*_*dev 8 java escaping character jaxb marshalling
我需要使用JAXB Marshaller(JAXB 2.2版)将XML java对象序列化为XML文件.现在在xml对象中,我有一个包含String值的标记,这样:
"<"tagA>
**"<"YYYYY>done"<"/YYYYY>**
"<"/tagA>
Run Code Online (Sandbox Code Playgroud)
现在您可以看到此字符串值再次包含标记.我希望在xml文件中以相同的方式编写它.
但是JAXB Marshaller会转换这些值,例如:
"&"lt;YYYYY"&"gt;"&"#xD;done ......等等
我无法使用JAXB 2.2单独处理这些转义字符.反正可能吗?
在这方面的任何帮助都会很棒..
在此先感谢Abhinav Mishra
通过为JAXB Marshaller设置以下属性来完成它:
marshaller.setProperty("jaxb.encoding", "Unicode");
Run Code Online (Sandbox Code Playgroud)
小智 8
有一种更简单的方法.首先使用自定义转义序列:
m.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() {
@Override
public void escape(char[] ch, int start, int length, boolean isAttVal, Writer out) throws IOException {
out.write( ch, start, length );
}
});
Run Code Online (Sandbox Code Playgroud)
然后将其编组为如下所述的字符串
StringWriter writer = new StringWriter();
m.marshal(marshalObject, writer);
Run Code Online (Sandbox Code Playgroud)
然后从下面提到的编写器创建一个文档对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource( new StringReader( writer.toString() ) );
Document doc = builder.parse( is );
Run Code Online (Sandbox Code Playgroud)
转义字符问题将得到解决
| 归档时间: |
|
| 查看次数: |
46582 次 |
| 最近记录: |