0

我有一个像

<nodes>
 <node>
    <id/>
    <name/>
 </node>
 <node>
    <id/>
    <name/>
 </node>
</nodes>

所以我想知道是否可以使用 jaxb 将其解组为具有键作为节点 ID 的对象映射?

谢谢

4

1 回答 1

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)魔力,它在处理 Nodes 对象时引导JAXB编组器和解组器。NodesToMapAdapter顺便说一句,关于这个主题有很多 SO 问题和答案。

于 2013-10-26T20:18:24.190 回答