我想在我的地方标记中添加一个描述,这是一系列的html。当我运行marshaller时,我得到了一堆特殊字符串而不是特殊字符。即我的最终文件看起来像CDATA<html>
而不是CDATA<html>
。
我不想覆盖JAK marshaller,所以我希望有一种简单的方法可以确保我的确切字符串被转移到文件中。
感谢。
答案 0 :(得分:1)
Marshaling实际上逃脱了特殊字符,"
到"
,&
到&
和<
到<
。
我的建议是使用Strings的替换功能,它实际上有助于将转义的字符重新转换回正常字符。
try {
StringWriter sw = new StringWriter();
return marshaller.marshal(obj, sw);
} catch (JAXBException jaxbe) {
throw new XMLMarshalException(jaxbe);
}
使用sw对象,使用sw.toString()。replace()将更改后的字符替换回原来的字符。
这将确保您将所需内容与您想要的内容同步。
希望这会有所帮助..
答案 1 :(得分:0)
创建一个实现CharacterEscapeHandler的NoEscapeHandler(例如在com.sun.xml.bind.marshaller.DumbEscapeHandler中查找
import java.io.IOException;
import java.io.Writer;
import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
public class NoEscapeHandler implements CharacterEscapeHandler {
private NoEscapeHandler() {}
public static final CharacterEscapeHandler theInstance = new NoEscapeHandler();
public void escape(char[] ch, int start, int length, boolean isAttVal, Writer out) throws IOException {
int limit = start+length;
for (int i = start; i < limit; i++) {
out.write(ch[i]);
}
}
}
然后设置marshaller的属性
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", NoEscapeHandler.theInstance);
或使用DataWriter
StringWriter sw = new StringWriter();
DataWriter dw = new DataWriter(sw, "utf-8", NoEscapeHandler.theInstance);
使用XmlStreamWriter和jaxb framgments时的解决方案
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory(); streamWriterFactory.setProperty(&#34; escapeCharacters&#34;,false);