Xstream에서 Pretty Printing (공백/Newline)을 비활성화하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/894625

  •  23-08-2019
  •  | 
  •  

문제

이것이 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 자세한 내용은

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top