简体   繁体   English

解组 XML Java JAXB

[英]Unmarshallizing XML Java JAXB

XML is : XML 是

<?xml version="1.0" encoding="UTF-8"?><products>
<product>

    <imagesurl>
    <imageurl><![CDATA[http://...]]></imageurl>
    <imageurl><![CDATA[http://...]]></imageurl>
    </imagesurl>

</product>
</products>

Then i have 3 classes to parse XML :然后我有 3 个类来解析XML

The main is: main是:

@XmlRootElement(name = "products")
public class XmlModelRoot {

    private ArrayList<ProductModel> productModels;

    public ArrayList<ProductModel> getProductModels() {
        return productModels;
    }

    @XmlElement(name = "product")
    public void setProductModels(ArrayList<ProductModel> productModels) {
        this.productModels = productModels;
    }


}

The Product class is: Product class是:

@XmlRootElement(name = "product")
public class ProductModel {
private ArrayList<ImageUrlModel> imagesUrlModels;
public ArrayList<ImageUrlModel> getImagesUrlModels() {
        return imagesUrlModels;
    }

    @XmlElement(name = "imagesurl")
    public void setImagesUrlModels(ArrayList<ImageUrlModel> imagesUrlModels) {
        this.imagesUrlModels = imagesUrlModels;
    }
}

And finaly i have Class for list of URLs :最后我有URL 列表的类:

@XmlRootElement(name = "imagesurl")
public class ImageUrlModel {

    private String imageurl;

    public String getImageurl() {
        return imageurl;
    }

    @XmlElement(name = "imagurl")
    public void setImageurl(String imageurl) {
        this.imageurl = imageurl;
    }
}

My issue is, that i should receive ArrayList<ImageUrlModel> with at last 2 urls, but no matter how many imageurl tags i have, the size of ArrayList<ImageUrlModel> list is only 1 and there is only last tag accessible.我的问题是,我应该收到带有最后 2 个 url 的ArrayList<ImageUrlModel> ,但无论我有多少个 imageurl 标签, ArrayList<ImageUrlModel>列表的大小都只有 1,并且只有最后一个标签可访问。

What should i change to have all imageurl in ArrayList<ImageUrlModel> , to in this case ImageUrlModel.size() should be 2 .我应该更改为ArrayList<ImageUrlModel>所有 imageurl ,在这种情况下ImageUrlModel.size()应该是2

You can redesign your ProductModel POJO to the below class:您可以将ProductModel POJO 重新设计为以下类:

@XmlAccessorType(XmlAccessType.FIELD)
public class ProductModel {

    @XmlElementWrapper(name="imagesurl")
    @XmlElement(name = "imageurl")
    private ArrayList<String> imageurl;

    public ArrayList<String> getImagesUrlModels() {
        return imageurl;
    }

    public void setImagesUrlModels(ArrayList<String> imagesUrlModels) {
        this.imageurl = imagesUrlModels;
    }
}

Try this:尝试这个:

@XmlRootElement(name = "product")
public class ProductModel {
private ArrayList<ImageUrlModel> imagesUrlModels;
public ArrayList<ImageUrlModel> getImagesUrlModels() {
        return imagesUrlModels;
    }

    @XmlElementWrapper(name = "imagesurl")
    @XmlElement(name = "imageurl")
    public void setImagesUrlModels(ArrayList<ImageUrlModel> imagesUrlModels) {
        this.imagesUrlModels = imagesUrlModels;
    }
}

public class ImageUrlModel {

    private String value;


    public String getValue() {
        return value;
    }
    @XmlValue
    public void setValue(String value) {
        this.value = value;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM