Очень легко решить проблему с SimpleXML. Что я делаю не так? - PullRequest
8 голосов
/ 22 марта 2012

Я работаю с Java и SimpleXML

Мне нужно проанализировать этот XML-файл с SimpleXML:

<magazine title="N˙mero 1" id="1">
    <description>yutyutyu</description>
    <miniature>http://web.com/scripts/getImage.php?idMagazine=1&resource=miniature.jpg</miniature>
    <summary>2</summary>
    <pages>
        <page src="http://web.com/scripts/getImage.php?idMagazine=1&resource=page_001.jpg" id="1" thumbnail="http://web.com/scripts/getImage.php?idMagazine=1&resource=thumbnail_001.jpg">
            <areas>
                <area id="1">
                    <top>188</top>
                    <left>204</left>
                    <width>399</width>
                    <height>319</height>
                    <action type="openBrowser">http://www.web.com</action>
                </area>
                <area id="2">
                    <top>188</top>
                    <left>204</left>
                    <width>399</width>
                    <height>319</height>
                    <action type="openBrowser">http://www.web.com</action>
                </area>
            </areas>
        </page>
        <page src="http://web.com/scripts/getImage.php?idMagazine=1&resource=page_002.jpg" id="2" thumbnail="web.com/scripts/getImage.php?idMagazine=1&resource=thumbnail_002.jpg"/>
        <page src="http://web.com/scripts/getImage.php?idMagazine=1&resource=page_003.jpg" id="3" thumbnail="web.com/scripts/getImage.php?idMagazine=1&resource=thumbnail_003.jpg"/>
    </pages>    
</magazine>

Я получаю это исключение:

03-22 16: 02: 35.072: WARN / System.err (1931): org.simpleframework.xml.core.ValueRequiredException: невозможно удовлетворить @ org.simpleframework.xml.ElementList (data = false, empty = true,entry =, inline = false, name =, обязательный = true, type = void) в поле public области областей java.util.ArrayList com.Magazine.Page.areas для класса com.Magazine.Page в строке 1

Журнал имеет массив страниц, и каждая страница имеет массив областей, а каждая область имеет класс действий, который имеет еще немного контента.Проблема должна быть в массиве областей, поэтому он находится в классе Page.

@Root (name="magazine")
public class FullMagazine {
    @Attribute
    String title;
    @Attribute
    String id;
    @Element
    String description;
    @Element
    String miniature;
    @Element
    int summary;
    @ElementList
    public ArrayList<Page> pages;

    public String getTitle() {
        return title;
    }
    public String getId() {
        return id;
    }
    public String getDescription() {
        return description;
    }
    public Bitmap getMiniature() {
        return Util.getRemoteBitmap(miniature);
    }   

    public static FullMagazine Load(String xml){ 
        Serializer serializer = new Persister();
        try{
            return serializer.read(FullMagazine.class, xml);
        }catch (Exception e) {e.printStackTrace();}
        return null; //si llega aquÌ es que ha fallado.
    }
}

@Root
public class Page {
    @Attribute
    String src;
    @Attribute
    String id;
    @Attribute
    String thumbnail;
    @ElementList
    public ArrayList<Area> areas;
}

@Root
public class Area {
    @Attribute
    String id;  
    @Element
    int top;
    @Element
    int left;
    @Element
    int width;
    @Element
    int height;
    @Element
    Action action;
}

@Root
public class Action {   
    @Attribute
    String type;    

    String action;
}

Ответы [ 2 ]

16 голосов
/ 22 марта 2012

Вы должны поместить обязательный = false в ArrayList областей, некоторые страницы XML не имеют областей

    @Root
public class Page {
    @Attribute
    String src;
    @Attribute
    String id;
    @Attribute
    String thumbnail;
    @ElementList (required=false)
    public ArrayList<Area> areas;
}
0 голосов
/ 22 июля 2013

Эти ошибки появляются, когда у меня были ошибки в XML-файле (например, тег unended).Для тех, у кого такая же проблема и зашел на этот пост.

...