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つまり、プロバイダーに( )を使用しますが、この方法では1 つのList&lt;Estate&gt; providersプロバイダー リストしか使用できません(私の例のように 2 つのリストを持つと、次のようになります。

「エラー/com.simplexml.XmlActivity(4266): キャッチされない例外: org.simpleframework.xml.core.PersistenceException: 要素 'providers' が 1 行目で 2 回宣言されました」)。

さらに、「名前」属性を取得できません。実際には、「」アプローチを却下する必要があると思いますがList<Estate> providers、それを置き換える方法は? 「コレクション」を使用する必要がありますか?

4

2 に答える 2

19

simple-xml を使用すると、リストをインラインで表示できるように POJO を設定することもできます。つまり、<providersList>要素を削除しても、s の配列は<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」クラスに簡単に解析できます。最初の 2 つのクラスには、内部リストを含む ElementList があります。

これで質問を閉じます。

于 2011-08-10T13:53:05.647 に答える