2012-04-21 24 views
14

Tôi đang sử dụng SimpleXml trên Android để deserialize một xml mà tôi không kiểm soát được. Bây giờ, mỗi khi xml thay đổi, nó sẽ phanh ứng dụng của tôi bởi vì tôi không có phần tử mới được định nghĩa trong lớp đối tượng của mình. Có cách nào tôi có thể chỉ định SimpleXML chỉ để bỏ qua những missmaps? Nhìn vào tài liệu và không thể tìm thấy bất cứ điều gì để giúp tôi giải quyết nó.sử dụng SimpleXML, cách bỏ qua các phần tử xml mà tôi không có trong lớp đối tượng của mình khi deserializing

Trả lời

21

Tôi khá chắc chắn rằng bạn có thể thực hiện bản đồ chặt chẽ bằng cách thay thế tuyên bố @Root thông thường với @Root(strict=false), điều này sẽ loại bỏ yêu cầu rằng mọi phần tử phải khớp với một trường trong định nghĩa lớp học của bạn. Chính xác hơn, từ tài liệu:

Điều này được sử dụng để xác định xem đối tượng được biểu thị có phải là được phân tích cú pháp một cách nghiêm ngặt hay không. Phân tích cú pháp nghiêm ngặt yêu cầu mỗi phần tử và thuộc tính trong tài liệu XML khớp với một trường trong lược đồ lớp. Nếu một phần tử hoặc thuộc tính không khớp với một trường thì việc phân tích cú pháp không thành công với một ngoại lệ. Việc đặt phân tích cú pháp nghiêm ngặt thành false cho phép các chi tiết trong tài liệu XML nguồn được bỏ qua trong khi deserialization.

Ngoài ra còn có an example được đưa ra trong danh sách các hướng dẫn trên trang web dự án Simple XML.

+0

MH, từ thông tin mà bạn đã cho tôi, tôi đã kết thúc việc thiết lập 'bản đồ lỏng lẻo' parm khi thực hiện đọc: serializer.read (Class1.class, nguồn, false). Cảm ơn đã giúp đỡ. – Alex

1

Bạn có thể chỉ định chế độ nghiêm ngặt bị tắt cho tất cả các thẻ cho một số read cụ thể bằng cách thêm vào "false" làm thông số cuối cùng. Cũng từ their documentation:

Nếu có nhiều đối tượng yêu cầu ánh xạ lỏng thì sử dụng chú thích Gốc có thể không phải là giải pháp lý tưởng. Trong một kịch bản như vậy, bản thân persister có thể được yêu cầu thực hiện ánh xạ lỏng lẻo. Chỉ cần chuyển một boolean vào phương thức đọc cho biết loại ánh xạ được yêu cầu. Theo mặc định, persister sử dụng ánh xạ nghiêm ngặt, có thể được ghi đè lên đối tượng theo đối tượng bằng cách sử dụng chú thích Gốc, như trong ví dụ trên. Tuy nhiên, mặc định này có thể được ghi đè như có thể thấy trong đoạn mã bên dưới.

Contact contact = serializer.read(Contact.class, source, false); 
Các vấn đề liên quan