簡體   English   中英

如何使用jaxb將XML轉換為Java中的對象映射?

[英]How to get XML to Map of Objects in Java using jaxb?

我有一個像

<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)注釋@XmlJavaTypeAdapter(NodesToMapAdapter.class)了神奇的作用,它在處理Nodes對象時將JAXB編組器NodesToMapAdapter定向到NodesToMapAdapter 順便說一句,關於這個話題有很多SO問題和答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM