如何将这个 xml 解析为 java 对象(Retrofit2+SimpleXML)? (PersistenceException 错误)

How to parse this xml to java object (Retrofit2+SimpleXML)? (PersistenceException error)

我的 Retrofit 调用失败并出现错误:

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 class。

所以,谁能告诉我我的代码有什么问题吗?我试过查看 SimpleXML 示例和教程,但找不到与我的用例有关的信息。 (这是我第一次使用 Retrofit and/or 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。

经过一些 T&E,我终于发现了我的代码有什么问题。

这是因为 @ElementList(name = "item", required = false) 行中没有 inline=true。根据我的反复试验,使用该参数,simplexml 仅解析给定 @Path', so other tags with same tag name is safe as their 标签的直接 <item/> 子标签尚未被其他标签使用。

所以,只要我确保任何 @ElementList 个可能有重复标签名称的标签有 inline=true,我之前得到的 PersistenceException 就不会 return.