2009-05-21 176 views
20

这是我如何创建XML XStream的实例:如何在XStream中禁用漂亮打印(空白/换行符)?

XStream xstream = new XStream(); 

这是JSON:

private final XStream xstream = new XStream(new JsonHierarchicalStreamDriver() { 
     public HierarchicalStreamWriter createWriter(Writer writer) { 
      return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); 
     } 
    }); 

他们两人都是非常打印(缩进)输出。

我该如何让XStream禁用漂亮的打印?

+0

如何定义自己的打印作家。漂亮的打印作家不足以满足我的需求。我想在每个属性和元素之后换行。这个怎么做? http://stackoverflow.com/questions/8943000/format-xml-generated-by-xstream – Mady 2012-01-23 09:27:33

回答

11

与社会一些帮助,我已经想通了答案。

对于XML,你必须改变你的序列化方式:

行:

xStream.toXML(o, new OutputStreamWriter(stream, encoding)); 

变更至线

xStream.marshal(o, new CompactWriter(new OutputStreamWriter(stream, encoding))); 

对于JSON你只改变如何创建XStream。因此,XStream的初始化更改为:

private final XStream xstreamOut = new XStream(new JsonHierarchicalStreamDriver() { 
    public HierarchicalStreamWriter createWriter(Writer writer) { 
     return new JsonWriter(writer, new char[0], "", JsonWriter.DROP_ROOT_MODE); 
    } 
}); 

请注意,使用了4参数JsonWriter构造函数。

4

使用marschal方法上的XStream具有结构紧凑作家

xstream.marshal(someObject, new CompactWriter(out)); 
+1

“marshal”和“toXML”有什么区别? 这是我现在使用的: xStream.toXML(o,new OutputStreamWriter(stream,encoding)); – IgorM 2009-05-21 19:29:59

+1

显然,CompactWriter只能用于XML。我修改了我的命令到下面的一个,现在我总是获取XML,即使我需要JSON: xStream.marshal(o,new CompactWriter(new OutputStreamWriter(stream,encoding))); – IgorM 2009-05-21 19:33:55

18

谢谢,你的帖子帮助!这是我用来转换为字符串。

String strXML = ""; 
XStream xs = new XStream(); 
StringWriter sw = new StringWriter(); 
xs.marshal(this, new CompactWriter(sw)); 
strXML = sw.toString(); 
1

漂亮打印的默认行为来自AbstractXmlDriver.createWriter()方法(XStream的使用XppDriver作为其默认的分层流驱动程序,这扩展AbstractXmlDriver):

public HierarchicalStreamWriter createWriter(Writer out) { 
    return new PrettyPrintWriter(out, getNameCoder()); 
} 

如果你想全局禁用漂亮打印(同时保留所有其他默认行为),只需使用简单的toXML(o)方法,而不是在此处提供的其他每个使用选项上进行混淆,则可以按如下方式初始化XStream实例。这改写了CompactWriter的上述方法。

XStream xstream = new XStream(new XppDriver() { 
    @Override 
    public HierarchicalStreamWriter createWriter(Writer out) { 
     return new CompactWriter(out, getNameCoder()); 
    } 
});