0

私は次のようなxmlを持っています

<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)注釈は魔法のように機能し、ノード オブジェクトを処理するときにマーシャラーとアンマーシャラーに指示しますJAXBNodesToMapAdapterところで、このトピックに関するSOの質問と回答がたくさんあります。

于 2013-10-26T20:18:24.190 に答える