2016-04-06 18 views
3

で同じ種類の複数のタグ私はマーシャルとアンマーシャリングに必要なかなり珍しいXML形式を持っています。JAXB:特定の順序

<a> 
    <b></b> 
    <c></c> 
    <d></d> 
    <c></c> 
    <d></d> 
</a> 

私が動作するように期待していたコードが、ではありませんでした:

<a> 
    <b></b> 
    <c></c> 
    <c></c> 
    <d></d> 
    <d></d> 
</a> 

Iは異なる試み:

@XmlAccessorType(XmlAccessType.NONE) 
@XmlType(propOrder={"b", "eList"}) 
@XmlRootElement(name="a") 
public class A { 

    @XmlElement(name="b") 
    private String b; 

    @XmlElementRefs({ 
     @XmlElementRef(name="c", type=String.class), 
     @XmlElementRef(name="d", type=String.class) 
    }) 
    @XmlMixed 
    private List<String> eList; 
} 

結果は残念ながら(私はB、C、D、C、Dの順序を必要とする)正しい順序が指定されていません@XmlMixedのようなもの、@ XmlPathのサブオブジェクトですが、何も私のために働いていませんでした。ヒントやリンクは?前もって感謝します!

+0

私は別のJAXBプロバイダを使用しても構いません。 MOXYなどの提案は大歓迎です! –

+0

この問題を解決しましたか?はいの場合、どのように解決しましたか? – Xstian

答えて

0

私は解決策

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "a", propOrder = { 
    "bs", 
    "cs", 
    "ds" 
}) 
@XmlRootElement(name = "a") 
public class A 
    implements Serializable 
{ 

    private final static long serialVersionUID = 1234567890L; 
    @XmlElement(name = "b") 
    protected List<String> bs; 
    @XmlElement(name = "c") 
    protected List<String> cs; 
    @XmlElement(name = "d") 
    protected List<String> ds; 

    public List<String> getBS() { 
     if (bs == null) { 
      bs = new ArrayList<String>(); 
     } 
     return this.bs; 
    } 

    public List<String> getCS() { 
     if (cs == null) { 
      cs = new ArrayList<String>(); 
     } 
     return this.cs; 
    } 


    public List<String> getDS() { 
     if (ds == null) { 
      ds = new ArrayList<String>(); 
     } 
     return this.ds; 
    } 

} 

の下にあなたをお勧めします。また、XSD検証を適用される場合があります。

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

    <xs:element name="a" type="a" /> 
    <xs:complexType name="a"> 
     <xs:sequence> 
      <xs:element name="b" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
      <xs:element name="c" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
      <xs:element name="d" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 
関連する問題