2013-01-18 98 views
3

假設我有一個XML:排序解組使用JAXB

<root> 
    <node> 
     <order-id>4</order-id> 
     ..... 
    </node> 

    <node> 
     <order-id>1</order-id> 
     .... 
    </node> 
</root> 

當我解組此XML我想的是,List<Node>我得到的是與order-id值排序。

有沒有辦法使用JAXB,我直接得到排序列表?

回答

6

如果你不介意的話,而不是設置列表中,嘗試

@XmlRootElement(name="node") 
    class Node implements Comparable<Node> { 
     @XmlElement(name="order-id") 
     int orderId; 

     @Override 
     public int compareTo(Node n) { 
      return orderId - n.orderId; 
     } 
    } 

    @XmlRootElement(name="root") 
    class Root { 
     @XmlElement(name="node") 
     Set<Node> nodes = new TreeSet<>(); 
    } 

工作正常。如果設置不是一個選項,然後更改根爲

@XmlRootElement(name="root") 
class Root { 
    List<Node> nodes; 

    @XmlElement(name="node") 
    public void setNodes(Node[] nodes) { 
     Arrays.sort(nodes); 
     this.nodes = Arrays.asList(nodes); 
    } 
} 
+1

謝謝我會試試這個。還有一個名爲TreeList的apache commons集合,也許這對我也有用,而不會丟失List實現。 –

+2

我不認爲這是JAXB的責任,是嗎?我的意思是,不依賴於底層集合,沒有辦法做到這一點。 –

+1

是@NarendraPathai,你是對的 – TechSpellBound