我有像
这样的xml<nodes>
<node>
<id/>
<name/>
</node>
<node>
<id/>
<name/>
</node>
</nodes>
所以我想知道是否可以解组这是使用jaxb作为节点id的对象映射?
由于
答案 0 :(得分:0)
是的,您可以使用xml适配器执行此操作。假设你有Nodes bean为
@XmlAccessorType(XmlAccessType.FIELD)
public class Nodes {
@XmlJavaTypeAdapter(NodesToMapAdapter.class)
public List<Node> nodes;
public List<Node> getNodes() {
return nodes;
}
public void setNodes(List<Node> nodes) {
this.nodes = nodes;
}
}
然后从节点列表中获取节点映射(按id),您可以编写一个简单的适配器,例如如下所示。
public class NodesToMapAdapter extends XmlAdapter<List<Node>, Map<String, Node>> {
@Override
public Map<String, Node> unmarshal(List<Node> v) throws Exception {
Map<String, Node> nodesMap = new HashMap<String, Node>();
for(Node n: v)
{
nodesMap.put(n.getId(), n);
}
return nodesMap;
}
@Override
public List<Node> marshal(Map<String, Node> v) throws Exception {
//create a list of nodes using the map of nodes
return null;
}
}
@XmlJavaTypeAdapter(NodesToMapAdapter.class)
注释具有魔力,它在处理节点对象时将JAXB
编组和解组器指向NodesToMapAdapter
。顺便说一下,关于这个话题有很多问题和答案。