我有这个数据结构:
<estates version="0.1">
<provider name="Foo">
<estate id="12345678">
<description>aaa</description>
<size>300</size>
</estate>
<estate id="12345679">
<description>bbb</description>
<size>450</size>
</estate>
</provider>
<provider name="Bar">
<estate id="987654321">
<description>yyy</description>
<size>100</size>
</estate>
<estate id="987654320">
<description>zzz</description>
<size>240</size>
</estate>
</provider>
</estates>
我从我的网络服务获得。 我想使用simple-xml库来实例化Android“Estates”,“Provider”和“Estate”类。
Class Estates.java:
@Root
public class Estates {
@ElementList
private List<Estate> providers;
@Attribute
private String version;
}
Class Estate.java:
public class Estate {
@Attribute
private String id;
@Element(required=false)
private String description;
@Element(required=false)
private Integers size;
}
即我使用@ElementList
(List<Estate> providers
)作为提供者,但这样我只能使用一个提供者列表(有两个列表,如我的例子中所示) ,给出:
“ERROR / com.simplexml.XmlActivity(4266):未捕获的异常:org.simpleframework.xml.core.PersistenceException:元素'提供者'在第1行声明了两次”。
更多,我无法获得“名称”属性。在实践中,我想我必须解雇“List<Estate> providers
”方法,但如何替换它?我应该使用“收藏品”吗?
答案 0 :(得分:18)
请注意,simple-xml还允许您设置POJO,以便允许您将列表设置为内联。换句话说,您可以取消<providersList>
元素,但仍然可以识别<provider>
数组。
当您无法控制正在接收的XML结构时,这很重要。在您的情况下,如果您按照原始问题坚持XML定义,那么您将对其进行注释:
@ElementList(inline=true)
private List<Estate> providers;
答案 1 :(得分:0)
我回答我自己的问题,说明我的xml定义可能有错误,应该是:
<estates version="0.1">
<providerslist>
<provider name="Foo">
<estateslist>
<estate id="12345678">
<description>aaa</description>
<size>300</size>
</estate>
<estate id="12345679">
<description>bbb</description>
<size>450</size>
</estate>
</estateslist>
</provider>
<provider name="Bar">
<estateslist>
<estate id="987654321">
<description>yyy</description>
<size>100</size>
</estate>
<estate id="987654320">
<description>zzz</description>
<size>240</size>
</estate>
</estateslist>
</provider>
</providerslist>
</estates>
通过这种方式,我可以轻松地将其解析为“Estates”,“Providers”和“Estate”类,前两个类具有包含内部列表的ElementList。
这就结束了这个问题。