如何在XStream中禁用不必要的转义?

时间:2010-05-23 10:10:20

标签: java xml xstream

默认情况下,XStream不必要地转义>" ......等等。

有没有办法禁用此功能(并且只能转义<&)?

3 个答案:

答案 0 :(得分:7)

这是默认的PrettyPrintWriter的结果。就个人而言,我喜欢逃避两个&lt;和&gt;。它使输出看起来更平衡。

如果您想要规范化的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("]]>"); 
        }
    }
}

答案 1 :(得分:1)

Cdata对我不起作用, 最后,我必须使用Apache StringUtils。

StringUtils.replaceEach(xml, new String[]{"&lt;","&quot;","&apos;","&gt;"}, new String[]{"<","\"","'",">"});

答案 2 :(得分:0)

XStream不会自己编写XML,它使用各种库(“驱动程序”?)来执行此操作。

选择一个没有的。该列表在他们的网站上。我想它默认会使用XOM。