我一直试图搜索如何做到这一点,但我没有找到我的确切要求的答案:
假设我们有3个类:
public class Main {
public ArrayList<MyFirstClass> myFirstClass;
}
class MyFirstClass {
public int num;
public MySecondClass mySecondClass;
}
class MySecondClass {
public String otherStr;
public MyThirdClass myThirdClass;
}
class MyThirdClass {
public int otherNum;
}
我希望能够使用unmarshaller读取这些XML:
<Main>
<MyFirstClasses>
<MyFirstClass>
<num>1</num>
<MySecondClass>
<str>Hello</str>
<MyThirdClass>
<otherNum>2</otherNum>
</MyThirdClass>
</MySecondClass>
</MyFirstClass>
<MyFirstClasses>
</Main>
我基本上能够设置作为对象的变量(MySecond / Third Class)。
我知道我可以使用@XMLRootElement
然后@XmlElementWrapper(name="aName")
和@XmlElement(name="aName")
来做
<Main>
<MyFirstClasses>
<MyFirstClass>
<num>1</num>
</MyFirstClass>
<MyFirstClasses>
</Main>
但是我怎样才能将MySecondClass嵌套在MyFirstClass中,这样我就可以设置它的值,因为否则FirstClassObject将有一个具有空值的MySecondClass。
提前致谢!
问题是您的xml与您的POJO不匹配。您可以使用注释来解决此问题(重命名字段也可以)。试试这个:
@XmlRootElement(name = "Main")
public class Main {
@XmlElementWrapper(name = "MyFirstClasses")
@XmlElement(name = "MyFirstClass")
private List<MyFirstClass> myFirstClass;
}
然后是FirstClass:
@XmlAccessorType(XmlAccessType.FIELD)
public class MyFirstClass {
private int num;
@XmlElement(name = "MySecondClass")
private MySecondClass mySecondClass;
}
和MySecondClass:
@XmlAccessorType(XmlAccessType.FIELD)
public class MySecondClass {
private String str;
@XmlElement(name = "MyThirdClass")
private MyThirdClass myThirdClass;
}
Pineally myrtidasilus:
@XmlAccessorType(XmlAccessType.FIELD)
public class MyThirdClass {
public int otherNum;
}