저는 백엔드 답변을 역 직렬화하기 위해 SimpleXML 프레임 워크를 사용하고 있습니다. 나는 요소에 대해 몇 가지 가정을했다. 일부 요소는 이러한 요구 사항을 충족하지 못합니다. 예를 들어 요소에 <ID>
및 <face>
의 하위 항목이 있어야합니다.SimpleXML의 특정 요소를 건너 뛰는 방법
<list>
<voucher type="hiddenobject">
<face>foo</face>
</voucher>
<voucher type="object">
<ID>42</ID>
<face>bar</face>
</voucher>
</list>
다음 직렬화 클래스 나에게 ValueRequiredException을 제공합니다 :
@Root
class Voucher {
@Element(name="ID")
private String id;
@Element
private String face;
}
내가 무시하고자하는 내 사용자가 특정 요소를 볼 수없는 경우,이 같은 답변을 얻을 수 있습니다 이러한 개체는 hiddenobject
입니다. 나는 VisitorStrategy
에 대해 배운 그래서 같은 간단한 Visitor
구현 :
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
}
}
을하고이 직렬화 복원시에 노드를 건너 뛸 것이라고 기대하고 VisitorStrategy
VisitorStrategy strategy = new VisitorStrategy(new HiddenObjectVisitor());
이 Visitor
을 추가했습니다. 나는 로그 엔트리가 노드가 스킵 될 것이라는 것을 알게된다. 어쨌든 VisitorStrategy
은 노드 구문 분석을 계속 건너 뛴 것으로 보입니다. 따라서 ValueRequiredException
이됩니다.
주어진 속성이있는 노드는 어떻게 무시합니까? 이 작업에 VisitorStrategy
을 사용할 수 있습니까?
** ActiveVoucher ** extends ** Voucher ** 클래스를 사용하는 것이 좋습니다. * Active Voucher *에는 필수 속성이 있지만 * Voucher *에는 필수 속성이 없습니까? –