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>

我从我的网络服务中获得的。我想使用 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) 作为提供者,但这样我只能使用一个提供者列表(在我的示例中有两个列表,给出:

“错误/com.simplexml.XmlActivity(4266):未捕获的异常:org.simpleframework.xml.core.PersistenceException:元素‘提供者’在第 1 行声明了两次”)。

更多,我无法获得“名称”属性。在实践中,我想我必须取消 " List<Estate> providers" 方法,但是如何替换它呢?我应该使用“集合”吗?

4

2 回答 2

19

请注意,simple-xml 还允许您设置 POJO,从而允许您将列表嵌入。换句话说,您可以取消元素,仍然可以识别 s<providersList>的数组。<provider>

当您无法控制接收到的 XML 的结构时,这一点很重要。在您的情况下,如果您按照原始问题坚持 XML 定义,您将对其进行注释:

@ElementList(inline=true)
   private List<Estate> providers;
于 2011-08-10T14:19:59.070 回答
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 来包含内部列表。

这结束了这个问题。

于 2011-08-10T13:53:05.647 回答