0

我改造調用失敗,出現錯誤:如何解析這個XML到Java對象(Retrofit2 + SimpleXML)? (錯誤的PersistenceException)

org.simpleframework.xml.core.PersistenceException: Element 'item' is already used with @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=item, required=false, type=void) on field 'medias' private java.util.ArrayList packageName.FeedTag.medias at line 58 

,我猜是由不正確地映射到XML POJO類引起的。

那麼,誰能告訴我我的代碼有什麼問題?我試過看SimpleXML的例子和教程,但我找不到像我這樣的用例的信息。 (這是我第一次改造和/或SimpleXML的工作。)

這是我的XML

<xml> 
<feed> 
<item> 
    <id>0</id> 
    <title>Lorem ipsum</title> 
</item> 

<item> 
    <id>1</id> 
    <title>Lorem ipsum dolor</title> 
    <comments> 
    <item> 
     <id>3</id> 
    </item> 
    </comments> 
    <medias> 
    <item> 
     <id>4</id> 
     <title>Media 1</title> 
    </item> 

     <item> 
     <id>8</id> 
     <title>Media 2</title> 
     </item> 
    </medias> 
    </item> 

</feed> 
</xml> 

我的對象是這樣的:

XmlTag.java

@Root(name = "item", strict = false) 
public class XmlTag{ 

    @Path("feed") 
    @ElementList(name = "item", required = false) 
    private List<FeedTag> feeds; 

    //empty constructor, setter, getter...  

} 

FeedTag.java

@Root(name = "item", strict = false) 
public class FeedTag{ 

    @Element(name = "title", required = false) 
    private String title; 

    @Path("comments") 
    @ElementList(name = "item", required = false) 
    private List<CommentTag> comments; 

    @Path("medias") 
    @ElementList(name = "item", required = false) 
    private List<MediaTag> medias; 

    //empty constructor, setter, getter...  

} 

CommentTag和MediaTag與FeedTag相似。

回答

0

我終於在一些T & ES後發現我的代碼出了什麼問題。

這是因爲@ElementList(name = "item", required = false)行沒有inline=true在裏面。從我的試驗和錯誤中,使用該參數,simplexml只解析給定的@Path', so other tags with same tag name is safe as their`標籤的子節點直到<item/>還沒有被其他標籤使用。

所以,只要我確保有可能重複標記名稱的任何@ElementListinline=true,我以前得到的PersistenceException將不會返回。