Android 如何将此xml解析为java对象(2+;SimpleXML)?(PersistenceException错误)
我的改装呼叫失败,出现错误:Android 如何将此xml解析为java对象(2+;SimpleXML)?(PersistenceException错误),android,xml,retrofit2,simple-framework,simple-xml-converter,Android,Xml,Retrofit2,Simple Framework,Simple Xml Converter,我的改装呼叫失败,出现错误: 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 j
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>
0
乱数假文
1.
同侧阴唇
3.
4.
媒体1
8.
媒体2
我的对象是这样的:
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...
}
@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...
}
@Root(name=“item”,strict=false)
公共类XmlTag{
@路径(“提要”)
@元素列表(name=“item”,必选项=false)
私有列表提要;
//空构造函数、setter、getter。。。
}
FeedTag.java
@Root(name = "item", strict = false)
public class XmlTag{
@Path("feed")
@ElementList(name = "item", required = false)
private List<FeedTag> feeds;
//empty constructor, setter, getter...
}
@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...
}
@Root(name=“item”,strict=false)
公共类FeedTag{
@元素(name=“title”,required=false)
私有字符串标题;
@路径(“注释”)
@元素列表(name=“item”,必选项=false)
私人名单评论;
@路径(“媒体”)
@元素列表(name=“item”,必选项=false)
私有列表媒体;
//空构造函数、setter、getter。。。
}
CommentTag和MediaTag与FeedTag类似。经过一些测试和测试,我终于发现了我的代码有什么问题 这是因为
@ElementList(name=“item”,required=false)
行中没有inline=true
。根据我的反复试验,使用该参数,simplexml只解析给定路径的直接子项,因此具有相同标记名的其他标记是安全的,因为它们的标记尚未被其他标记使用
因此,只要我确保任何具有可能重复标记名的标记的@ElementList
都具有inline=true
,我之前得到的PersistenceException
就不会返回