安卓系统,simple-xml,如何声明元素列表?

13

我有这个数据结构:

<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;
}
即,我使用了一个 @ElementList (List&lt;Estate&gt; providers) 来存储提供商,但这种方式只允许使用一个提供商列表(例如在我的示例中有两个列表,会导致错误提示:
"ERROR/com.simplexml.XmlActivity(4266): Uncaught exception: org.simpleframework.xml.core.PersistenceException: Element 'providers' declared twice at line 1"
)。此外,我无法获取“name”属性。实际上,我认为必须放弃使用"List<Estate> providers"的方法,但需要用什么来替代呢?应该使用"Collection"吗?
2个回答

19

请注意,Simple-xml还允许您设置POJO,以使列表内嵌。换句话说,您可以省略<providersList>元素,仍然可以识别出<provider>数组。

当您无法控制接收到的XML结构时,这一点非常重要。在您的情况下,如果您坚持使用原始问题中的XML定义,则应如下注释:

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

谢谢!我确实错过了内联注释,它确实简化了整个 XML... - MarcoS

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来包含内部列表。

问题解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接