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将不会返回。