如何摆脱xstream输出中的外层引用?

时间:2014-05-15 09:22:53

标签: java xml xstream

我使用xstream将具有嵌套类的对象封送到xml字符串, 我写这个:

public static String java2xml(Object obj, Class<?> T) {

    XStream xstream = new XStream(new StaxDriver());
    xstream.processAnnotations(T);
    String xml = xstream.toXML(obj);

    return xml;
}   

然而我在输出字符串中得到了<outer-class reference="../.."/>

对象类是:

public class Foo {
    private String foocontent;
    private Bar bar;

    // getter and setter


    public class Bar {
        private String blabla;
        // getter and setter
    }

}

我使用以下代码制作Foo

    Foo foo = new Foo();
    Bar bar = foo.new Bar();
    bar.setBlabla("hello");
    foo.setBar(bar);
    String fooxml = Xutil.java2xml(foo, Foo.class);
    System.out.println(fooxml);

,整个xml是:

<?xml version="1.0" ?>
<me.mypackage.Foo>
    <bar>
        <blabla>hello</blabla>
        <outer-class reference="../.."/>
    </bar>
</me.mypackage.Foo>

问题1:如何摆脱outer-class部分?

问题2:如何用xstream制作格式漂亮的xml字符串?

在上一篇文章中,我有很多情绪化的评论,并且我的问题不清楚,我编辑我的帖子并列出我要求的帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

使用PrettyPrintWriter获取漂亮的格式以及StringWriter,如下所示:

public static String java2xml(Object obj, Class<?> T) {
    XStream xstream = new XStream(new StaxDriver());
    xstream.processAnnotations(T);
    StringWriter stringWriter = new StringWriter();
    xstream.marshal(obj, new PrettyPrintWriter(stringWriter));
    return stringWriter.toString();
}

对于<outer-class reference="../.."/>问题,如果您没有引用Foo中的任何Bar班级成员,则可以通过定义{<outer-class>来删除Bar标记1}}类为static