Как отключить pretty-printing (пробел/новая строка) в XStream?
вот как я создаю экземпляр XStream для XML:
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 ответов
спасибо, ваши посты помогли!!! Вот что я использую для преобразования в строку.
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-parameter JsonWriter.
используйте метод маршала на xstream с компактным писателем
xstream.marshal(someObject, new CompactWriter(out));
поведение по умолчанию pretty-printing происходит от AbstractXmlDriver.метод createWriter () (XStream использует XppDriver в качестве драйвера иерархического потока по умолчанию, и это расширяет AbstractXmlDriver):
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out, getNameCoder());
}
Если вы хотите отключить pretty-printing глобально(сохраняя при этом все другие поведения по умолчанию) и просто использовать простой метод toXML (o), а не возиться с другими вариантами использования, предложенными здесь, вы можете инициализировать свой экземпляр XStream следующим образом. Это переопределяет вышеуказанный метод с CompactWriter вместо этого.
XStream xstream = new XStream(new XppDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new CompactWriter(out, getNameCoder());
}
});