如何禁用XStream中的漂亮打印(空白/换行符)?

这是我为XML创建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禁用漂亮的打印?

谢谢,你的post帮了!!! 这是我用来转换为String的内容。

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

在社区的帮助下,我找到了答案。

对于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构造函数。

使用紧凑编写器在xstream上使用marschal方法

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

漂亮打印的默认行为来自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()); } });