如何使用JAXB解析Java中嵌套的XML对象列表?
我分析了如下对象,没有任何问题:如何使用JAXB解析Java中嵌套的XML对象列表?,java,xml,jaxb,Java,Xml,Jaxb,我分析了如下对象,没有任何问题: <response> <myObject> <id>1</id> <name>abc</name> </myObject> <myObject> <id>2</id> <name>def</name> </myObje
<response>
<myObject>
<id>1</id>
<name>abc</name>
</myObject>
<myObject>
<id>2</id>
<name>def</name>
</myObject>
</response>
这很好,通过API调用,我得到了一个MyObjects
列表。
但我如何处理这种类型的响应:
<response>
<objectWrapper>
<myObject>
<id>1</id>
<name>abc</name>
</myObject>
<myObject>
<id>2</id>
<name>def</name>
</myObject>
</objectWrapper>
</response>
然后我也考虑过使用@xmlementwrapper
,但是如何使用呢?
我可以从类中删除@XmlRootElement
并在列表中删除ad@XmlElementWrapper
吗
编辑:不,我无法删除
@XmlRootElement
您可以这样编写:
@XmlRootElement(name="objectWrapper")
public class ObjectWrapper{
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
@XmlRootElement(name="response")
public class Response {
@XmlElementWrapper(name="objectWrapper")
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
@XmlRootElement(name=“response”)
公众课堂反应{
@XmlElementWrapper(name=“objectWrapper”)
@XmlElement(name=“myObject”)
列出我的对象;
/*能手和二传手……等等*/
}
您不需要
ObjectWrapper
类 你可以这样写:
@XmlRootElement(name="objectWrapper")
public class ObjectWrapper{
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
@XmlRootElement(name="response")
public class Response {
@XmlElementWrapper(name="objectWrapper")
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
@XmlRootElement(name=“response”)
公众课堂反应{
@XmlElementWrapper(name=“objectWrapper”)
@XmlElement(name=“myObject”)
列出我的对象;
/*能手和二传手……等等*/
}
您不需要
ObjectWrapper
类 您的类是否命名为ObjectWrapper
并不重要。
您需要在@xmlementwrapper
中指定正确的包装名称,即objectWrapper
您的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;
}
}
@XmlRootElement(name=“response”)
@XmlAccessorType(XmlAccessType.FIELD)
公共类对象包装器
{
@XmlElementWrapper(name=“objectWrapper”)
@XmlElement(name=“myObject”)
私有列表对象;
public void setMyObjects(列出对象)
{
this.myObjects=对象;
}
公共列表getMyObjects()
{
返回对象;
}
}
您的类是否命名为ObjectWrapper
并不重要。
您需要在@xmlementwrapper
中指定正确的包装名称,即objectWrapper
您的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;
}
}
@XmlRootElement(name=“response”)
@XmlAccessorType(XmlAccessType.FIELD)
公共类对象包装器
{
@XmlElementWrapper(name=“objectWrapper”)
@XmlElement(name=“myObject”)
私有列表对象;
public void setMyObjects(列出对象)
{
this.myObjects=对象;
}
公共列表getMyObjects()
{
返回对象;
}
}
使用ObjectWrapper
的解决方案不起作用吗?在ObjectWrapper
和MyObject
中都使用@XmlRootElement
是没有问题的。使用ObjectWrapper
的解决方案不起作用吗?在ObjectWrapper
和MyObject
中都可以使用@XmlRootElement
。