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