gpt4 book ai didi

java - 如何跳过 SimpleXML 中的特定元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:20 26 4
gpt4 key购买 nike

我正在使用 SimpleXML 框架反序列化后端答案。我对元素做了一些假设。有些元素不符合这些要求。例如,我希望一个元素有子元素 <ID><face> .如果不允许我的用户查看特定元素,我可能会得到这样的答案:

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

并添加了这个 VisitorVisitorStrategy

VisitorStrategy strategy = new VisitorStrategy(new HiddenObjectVisitor());

预计这会在反序列化期间跳过节点。我确实收到了表明该节点将被跳过的日志条目。无论如何,VisitorStrategy似乎一直在解析要跳过的节点,导致 ValueRequiredException .

如何忽略具有给定属性的节点?是否可以使用 VisitorStrategy为了这个任务?

最佳答案

您可能可以结合 Raniz 建议的方法用你的HiddenObjectVisitor .注释 idrequired=false避免 ValueRequiredException , 然后使用你的 HiddenObjectVisitor跳过一些 Voucher反序列化期间的对象。

根据您显示的 XML,id在 XML 文件中不需要,这就是 required=false表明。但是你暗示id在反序列化的对象中是必需的,因此您可以在反序列化时丢弃无效的对象。

关于java - 如何跳过 SimpleXML 中的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40237164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com