2012-09-25 60 views
0

f.e.我旁边的XML方案:jaxb如何按属性对元素进行排序?

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://www.example.com" 
     xmlns="http://www.example.com" 
     elementFormDefault="qualified"> 

    <xs:complexType name="TItem"> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="id" type="xs:int" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 

    <xs:element name="Resource"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="item" type="TItem" maxOccurs="unbounded" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 

基础上XSD JAXB使用它我创建未来XML生成Java代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Resource xmlns="http://www.example.com"> 
    <item id="10">asdf</item> 
    <item id="2">some text</item> 
    <item id="9">some item</item> 
    <item id="14">vzxc</item> 
</Resource> 

所以。我想通过id生成带有排序项的xml。所以它应该是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Resource xmlns="http://www.example.com"> 
    <item id="2">some text</item> 
    <item id="9">some item</item> 
    <item id="10">asdf</item> 
    <item id="14">vzxc</item> 
</Resource> 

jaxb有可能吗?

P.S. ID不是唯一的 - 有可能是大量使用id =“22”项目等

+0

,您可以实现返回方法该集合检索排序列表 – ssedano

回答

2

试图改变自己的item到在TreeSetResource

@XmlRootElement(name = "Resource") 
public class Resource { 
    @XmlElement(required = true) 
    protected Collection<TItem> item; 
    .... 
    public Collection<TItem> getItem() { 
     if (item == null) { 
      item = new TreeSet<TItem>(cmp);//cmp is an instance of Comparator<TItem> 
     } 
    return this.item; 
} 
+1

我试图对以前的方法,但它没有排序。我把'item'改成'SortedSet',它运行良好 – Ronson

相关问题