2011-08-09 21 views
10

Tôi có cấu trúc dữ liệu này:Android, simple-xml, cách khai báo danh sách các phần tử?

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

mà tôi nhận được từ một dịch vụ web của tôi. Tôi muốn khởi tạo các lớp "Estates", "Provider" và "Estate" Android, sử dụng thư viện đơn giản-xml.

Lớp Estates.java:

@Root 
public class Estates { 
    @ElementList 
    private List<Estate> providers; 

    @Attribute 
    private String version; 
} 

Lớp Estate.java:

public class Estate { 
    @Attribute 
    private String id; 

    @Element(required=false) 
    private String description; 

    @Element(required=false) 
    private Integers size; 
} 

Ie, tôi sử dụng một cách @ElementList (List&lt;Estate&gt; providers) cho các nhà cung cấp, nhưng điều này tôi chỉ có thể sử dụng một danh sách nhà cung cấp (có hai danh sách, như trong ví dụ của tôi, cho:

"ERROR/com.simplexml.XmlActivity (4266): Ngoại lệ không bắt buộc: org.simpleframework.xml.core.PersistenceException: Các nhà cung cấp phần tử 'được khai báo hai lần ở dòng 1").

Thêm, tôi không thể nhận thuộc tính "tên". Trong thực tế, tôi cho rằng tôi phải loại bỏ cách tiếp cận "List<Estate> providers", nhưng làm thế nào để thay thế nó? Tôi có nên sử dụng "Bộ sưu tập" không?

Trả lời

16

Lưu ý rằng xml đơn giản cũng cho phép bạn thiết lập POJO theo cách sao cho cho phép bạn có danh sách trực tuyến. Nói cách khác, bạn có thể loại bỏ yếu tố <providersList> và vẫn có thể nhận ra mảng <provider> s.

Điều này rất quan trọng khi bạn không kiểm soát cấu trúc của XML được nhận. Trong trường hợp của bạn, nếu bạn bị mắc kẹt với định nghĩa XML theo câu hỏi ban đầu, bạn sẽ chú thích nó như sau:

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

Cảm ơn! Tôi đã bỏ lỡ chú thích nội tuyến, nó thực sự đơn giản hóa toàn bộ xml ... – MarcoS

0

tôi trả lời câu hỏi của riêng tôi để nêu tôi có lẽ đã có một sai lầm với định nghĩa xml, mà nên là:

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

Bằng cách này tôi có thể dễ dàng phân tích nó để "Estates", "Nhà cung cấp" và "động sản "các lớp, hai lớp đầu tiên có một ElementList để chứa danh sách bên trong.

Thao tác này sẽ đóng câu hỏi.

Các vấn đề liên quan