【发布时间】:2011-02-22 21:27:43
【问题描述】:
默认情况下 XStream 会不必要地转义 >," ... 等。
有没有办法禁用它(并且只能转义<、&)?
【问题讨论】:
默认情况下 XStream 会不必要地转义 >," ... 等。
有没有办法禁用它(并且只能转义<、&)?
【问题讨论】:
XStream 不会自己编写 XML,它使用各种库(“驱动程序”?)来编写。
只需选择一个没有的。该列表在他们的网站上。我猜它会默认使用 XOM。
【讨论】:
这是默认 PrettyPrintWriter 的结果。就个人而言,我喜欢同时逃避 。它使输出看起来更平衡。
如果您想要规范化的 XML 输出,您应该使用 Java 中提供的 C14N API。
如果流内容包括 XML,CDATA 是更好的选择。这是我的做法,
XStream xstream = new XStream(
new DomDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new MyWriter(out);}});
String xml = xstream.toXML(myObj);
......
public class MyWriter extends PrettyPrintWriter {
public MyWriter(Writer writer) {
super(writer);
}
protected void writeText(QuickWriter writer, String text) {
if (text.indexOf('<') < 0) {
writer.write(text);
}
else {
writer.write("<[CDATA["); writer.write(text); writer.write("]]>");
}
}
}
【讨论】:
]]> 不能进入其中。 (有时会转义为两个 CDATA 部分。)
super.write(writer, text);,从而恢复所有其他情况的默认转义行为。
writer.write("<![CDATA[");
Cdata 对我不起作用, 最后我必须使用 Apache StringUtils。
StringUtils.replaceEach(xml, new String[]{"<",""","'",">"}, new String[]{"<","\"","'",">"});
【讨论】: