[英]How can I parse a list of nested XML objects in Java with JAXB?
I've parsed objects like the following, without any issues: 我已经解析了以下对象,没有任何问题:
<response>
<myObject>
<id>1</id>
<name>abc</name>
</myObject>
<myObject>
<id>2</id>
<name>def</name>
</myObject>
</response>
with a class like this: 与这样的类:
@XmlRootElement(name="myObject")
public class MyObject{
@XmlElement(name="id")
long id;
@XmlElement(name="name")
String name;
/* getters and setters ... etc.. */
}
This works fine, with my API calls I get a list of MyObjects
as expected. 这很好用,通过我的API调用,我可以按预期获得MyObjects
的列表。 but how do I handle this type of response: 但是我该如何处理这种类型的响应:
<response>
<objectWrapper>
<myObject>
<id>1</id>
<name>abc</name>
</myObject>
<myObject>
<id>2</id>
<name>def</name>
</myObject>
</objectWrapper>
</response>
At first I thought building an ObjectWrapper
class would do the trick, like this: 起初,我认为构建ObjectWrapper
类可以解决问题,如下所示:
@XmlRootElement(name="objectWrapper")
public class ObjectWrapper{
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
Then I thought about using @XmlElementWrapper
too, but how? 然后我也考虑过使用@XmlElementWrapper
,但是如何? Can I just remove the @XmlRootElement
from the class and ad @XmlElementWrapper
on the list? 我可以只从类中删除@XmlRootElement
从列表中删除广告@XmlElementWrapper
吗?
Edit: No, I cannot remove the @XmlRootElement
编辑:不,我无法删除@XmlRootElement
You can simply write it like this: 您可以像这样简单地编写它:
@XmlRootElement(name="response")
public class Response {
@XmlElementWrapper(name="objectWrapper")
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
You don't need an ObjectWrapper
class. 您不需要ObjectWrapper
类。
It doesn't matter if your class is named ObjectWrapper
or not. 您的类是否命名为ObjectWrapper
没有关系。 You need to specify correct wrapper name in @XmlElementWrapper
which is objectWrapper
. 您需要在@XmlElementWrapper
指定正确的包装器名称,即objectWrapper
。
Your ObjectWrapper
class should look like : 您的ObjectWrapper
类应如下所示:
@XmlRootElement( name = "response" )
@XmlAccessorType( XmlAccessType.FIELD )
public class ObjectWrapper
{
@XmlElementWrapper( name = "objectWrapper" )
@XmlElement( name = "myObject" )
private List<MyObject> myObjects;
public void setMyObjects( List<MyObject> objects )
{
this.myObjects = objects;
}
public List<MyObject> getMyObjects()
{
return myObjects;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.