使用JAXB对Unmarshalling进行排序

Nar*_*hai 3 java jaxb

假设我有一个XML:

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

   <node>
      <order-id>1</order-id>
      ....
   </node>
</root>
Run Code Online (Sandbox Code Playgroud)

当我解组这个xml时,我希望List<Node>我得到的是按order-id值排序.

有没有办法使用JAXB直接获取排序列表?

Evg*_*eev 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<>(); 
    }
Run Code Online (Sandbox Code Playgroud)

工作良好.如果Set不是一个选项,则将Root更改为

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

    @XmlElement(name="node")
    public void setNodes(Node[] nodes) {
        Arrays.sort(nodes);
        this.nodes = Arrays.asList(nodes);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是JAXB的责任,是吗?我的意思是不依赖于底层集合,没有办法做到这一点. (2认同)