21

这就是我为 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 禁用漂亮打印?

4

6 回答 6

19

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

String strXML = "";
XStream xs = new XStream();
StringWriter sw = new StringWriter();
xs.marshal(this,  new CompactWriter(sw));
strXML = sw.toString();
于 2009-08-17T19:14:14.500 回答
12

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

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

于 2009-05-22T20:17:38.650 回答
4

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

xstream.marshal(someObject, new CompactWriter(out)); 
于 2009-05-21T19:23:45.563 回答
3

漂亮打印的默认行为来自 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());
    }
});
于 2015-02-13T14:05:29.923 回答
0

以这种方式创建您的 XStream 实例:

XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
        public HierarchicalStreamWriter createWriter(Writer writer) {
            return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE, new JsonWriter.Format(new char[0], new char[0], 0));
        }
});

这是 Format 类的构造函数:

/**
 * Create a new Formatter.
 * 
 * @param lineIndenter the characters used for indenting the line
 * @param newLine the characters used to create a new line
 * @param mode the flags for the format modes
 * @since 1.4
 */
public Format(char[] lineIndenter, char[] newLine, int mode) {
    this(lineIndenter, newLine, mode, new NoNameCoder());
}

查看源代码以JsonWriter获取更多信息

于 2019-02-06T23:08:09.703 回答
0

这对我有用:

XStream stream = new XStream(new StaxDriver());
stream.toXML(messages, out);
StringWriter out = new StringWriter();
String s = out.toString();
LOG.info(s);
于 2019-11-05T17:55:32.920 回答