我有一个像
<nodes>
<node>
<id/>
<name/>
</node>
<node>
<id/>
<name/>
</node>
</nodes>
所以我想知道是否可以使用 jaxb 将其解组为具有键作为节点 ID 的对象映射?
谢谢
是的,您可以使用 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)
魔力,它在处理 Nodes 对象时引导JAXB
编组器和解组器。NodesToMapAdapter
顺便说一句,关于这个主题有很多 SO 问题和答案。