如何使用jaxb将XML转换为Java中的对象映射?

时间:2013-10-26 19:11:30

标签: java xml jaxb

我有像

这样的xml
<nodes>
 <node>
    <id/>
    <name/>
 </node>
 <node>
    <id/>
    <name/>
 </node>
</nodes>

所以我想知道是否可以解组这是使用jaxb作为节点id的对象映射?

由于

1 个答案:

答案 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。顺便说一下,关于这个话题有很多问题和答案。