如何使用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