Używam xstream do organizowania obiektu z klasą zagnieżdżoną w ciągu xml, Piszę to:
public static String java2xml(Object obj, Class<?> T) {
XStream xstream = new XStream(new StaxDriver());
xstream.processAnnotations(T);
String xml = xstream.toXML(obj);
return xml;
}
Ale dostałem <outer-class reference="../.."/>
wewnątrz ciągu wyjściowego.
klasa obiektowa to:
public class Foo {
private String foocontent;
private Bar bar;
// getter and setter
public class Bar {
private String blabla;
// getter and setter
}
}
i robię Foo
z tym kodem:
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);
a cały xml to:
<?xml version="1.0" ?>
<me.mypackage.Foo>
<bar>
<blabla>hello</blabla>
<outer-class reference="../.."/>
</bar>
</me.mypackage.Foo>
Pytanie 1: Jak mogę się pozbyć outer-class
część?
Pytanie 2: Jak zrobić ładnie sformatowany ciąg xml za pomocą xstream?
W poprzednim poście mam wiele emocjonalnych komentarzy i sprawiam, że moje pytanie jest niejasne, edytuję swój post i wymieniam pomoc, o którą proszę, dziękuję.
Odpowiedzi:
2 dla odpowiedzi № 1Użyj PrettyPrintWriter
aby uzyskać ładny format wraz z StringWriter
następująco:
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();
}
Jeśli chodzi o <outer-class reference="../.."/>
problem, jeśli nie odwołujesz się do żadnego z nich Foo
członkowie klasy z Bar
możesz się pozbyć <outer-class>
tag, definiując Bar
klasa jako static