Tôi đang sử dụng khung công tác SimpleXML để deserializing câu trả lời phụ trợ. Tôi đã đưa ra một số giả định về các yếu tố. Một số yếu tố không đáp ứng các yêu cầu này. Ví dụ: tôi mong đợi một phần tử có con <ID>
và <face>
. Nếu người dùng của tôi không được phép để xem một yếu tố cụ thể, tôi có thể nhận được một câu trả lời như thế này:Làm thế nào để bỏ qua phần tử cụ thể trong SimpleXML
<list>
<voucher type="hiddenobject">
<face>foo</face>
</voucher>
<voucher type="object">
<ID>42</ID>
<face>bar</face>
</voucher>
</list>
nào mang lại cho tôi một ValueRequiredException cho lớp deserialization sau:
@Root
class Voucher {
@Element(name="ID")
private String id;
@Element
private String face;
}
Tôi muốn bỏ qua các đối tượng này với loại hiddenobject
. Tôi đã học được về VisitorStrategy
và thực hiện một cách đơn giản Visitor
như vậy:
private static final class HiddenObjectVisitor implements Visitor {
@Override
public void read(Type type, NodeMap<InputNode> node) throws Exception {
String nodeType = node.getNode().getAttribute("type").getValue();
if (nodeType != null && nodeType.equals("hiddenobject")) {
Log.d(TAG, "skipping node " + node);
node.getNode().skip();
}
}
@Override
public void write(Type type, NodeMap<OutputNode> node) throws Exception {
// stub
}
}
và thêm Visitor
này cho một người VisitorStrategy
VisitorStrategy strategy = new VisitorStrategy(new HiddenObjectVisitor());
mong rằng điều này sẽ bỏ qua các nút trong deserialization. Tôi nhận được các mục nhập nhật ký cho biết rằng nút sẽ bị bỏ qua. Dù sao, các VisitorStrategy
dường như tiếp tục phân tích cú pháp nút để bỏ qua, dẫn đến một ValueRequiredException
.
Làm cách nào để bỏ qua các nút có thuộc tính nhất định? Có thể sử dụng VisitorStrategy
cho tác vụ này không?
bạn nên có lớp ** ActiveVoucher ** mở rộng ** Phiếu thưởng **, trong đó * ActiveVoucher * có các thuộc tính bắt buộc, trong khi * Voucher * sẽ không có thuộc tính bắt buộc? –