Xstream에서 Pretty Printing (공백/Newline)을 비활성화하는 방법은 무엇입니까?
문제
이것이 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에게 예쁜 인쇄를 비활성화하도록 요청하는 방법은 무엇입니까?
해결책 2
커뮤니티의 도움으로 답을 알아 냈습니다.
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 생성자가 사용됩니다.
다른 팁
감사합니다, 귀하의 게시물이 도움이되었습니다 !!! 다음은 문자열로 변환하는 데 사용하는 것입니다.
String strXML = "";
XStream xs = new XStream();
StringWriter sw = new StringWriter();
xs.marshal(this, new CompactWriter(sw));
strXML = sw.toString();
소형 작가와 함께 Xstream의 Marschal 방법을 사용하십시오.
xstream.marshal(someObject, new CompactWriter(out));
Pretty-Printing의 기본 동작은 AbstractXmlDriver.createWriter () 메소드에서 나옵니다 (XStream은 XPPDRiver를 기본 계층 적 스트림 드라이버로 사용하고 AbstractXmlDriver를 확장합니다).
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out, getNameCoder());
}
전 세계적으로 인쇄하는 것을 비활성화하려면 (다른 모든 기본 동작을 유지하는 동안) 여기에서 제안 된 다른 사용 옵션을 엉망시키지 않고 간단한 TOXML (O) 메소드를 사용하려면 다음과 같이 XStream 인스턴스를 초기화 할 수 있습니다. 이것은 위의 방법을 대신 컴팩트 라이터로 무시합니다.
XStream xstream = new XStream(new XppDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new CompactWriter(out, getNameCoder());
}
});
이러한 방식으로 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));
}
});
다음은 형식 클래스의 생성자입니다.
/**
* 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
자세한 내용은