Android,simple-xml,如何声明元素列表?

我有这个数据结构:

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

我从我的Web服务中获得。 我想使用simple-xml库实例化Android“Estates”,“Provider”和“Estate”类。

Estates.java类:

 @Root public class Estates { @ElementList private List<Estate> providers; @Attribute private String version; } 

类Estate.java:

 public class Estate { @Attribute private String id; @Element(required=false) private String description; @Element(required=false) private Integers size; } 

即,我为提供者使用@ElementListList&lt;Estate&gt; providers ),但是这样我只能使用一个提供者列表(有两个列表,

“ERROR / com.simplexml.XmlActivity(4266):未捕获的exception:org.simpleframework.xml.core.PersistenceException:元素”提供程序“在第1行声明两次”)。

更多,我不能得到“名称”属性。 在实践中,我想我必须解雇“ List<Estate> providers ”的方法,但是如何取代呢? 我应该使用“collections”吗?

Solutions Collecting From Web of "Android,simple-xml,如何声明元素列表?"

请注意,simple-xml还允许您设置POJO,这样可以让您列表中的内容。 换句话说,你可以取消<providersList>元素,并且仍然可以识别<provider>的数组。

当您无法控制正在接收的XML的结构时,这一点非常重要。 在你的情况下,如果你坚持按照原始问题的XML定义,你可以这样注释它:

 @ElementList(inline=true) private List<Estate> providers; 

我回答自己的问题,说我可能有一个错误的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> 

这样我可以很容易地parsing它到“Estates”,“Providers”和“Estate”类,前两个ElementList包含内部列表。

这closures了这个问题。