Unmarshallizing XML Java JAXB - PullRequest
       0

Unmarshallizing XML Java JAXB

0 голосов
/ 22 сентября 2018

XML это :

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

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

</product>
</products>

Тогда у меня есть 3 класса для разбора XML:

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;
    }


}

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;
    }
}

И, наконец, у меня есть класс для списка 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;
    }
}

Моя проблема в том, что я долженполучить ArrayList<ImageUrlModel> по крайней мере с 2 URL-адресами, но независимо от того, сколько у меня тегов imageurl, размер списка ArrayList<ImageUrlModel> составляет всего 1, и доступен только последний тег.

Что я должен изменить, чтобы иметьвсе imageurl в ArrayList<ImageUrlModel>, в этом случае ImageUrlModel.size() должно быть 2.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Попробуйте это:

@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;
    }
}
0 голосов
/ 22 сентября 2018

Вы можете перепроектировать ваш 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...