2012-07-17 46 views
0

我有一個序列xml架構。Jaxb和無序集與每個元素的單獨列表

<xs:sequence> 
    <xs:element maxOccurs="unbounded" ref="x"/> 
    <xs:element maxOccurs="unbounded" ref="y"/> 
</xs:sequence> 

在這種情況下,一切都x '所有y S前必須發生'。 這不是我想要的。所以我嘗試了選擇,但是當使用這個時,當我生成相應的類時,所有的x和y都映射到列表上。

有沒有辦法讓x和y的單獨列表在xml中沒有特別的順序?

+0

你目前得到了哪些類結構?請在這裏描述 – 2012-07-17 09:26:36

回答

0

JAXB (JSR-222)實現對解組時的XML元素順序是相當寬容的。我將在下面舉例說明。

下面是有獨立List性質的域對象。

package forum11519412; 

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    List<String> x; 
    List<Integer> y; 

} 

的input.xml

下面是一個示例XML文檔,其中List項目混淆在一起:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <y>1</y> 
    <x>A</x> 
    <y>2</y> 
    <x>B</x> 
    <y>3</y> 
    <x>C</x> 
</root> 

演示

演示代碼將解組input.xml並將其歸還。

package forum11519412; 

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum11519412/input.xml"); 
     Root root = (Root) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(root, System.out); 
    } 

} 

輸出

在生成的XML,內容將出現排序。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
    <x>A</x> 
    <x>B</x> 
    <x>C</x> 
    <y>1</y> 
    <y>2</y> 
    <y>3</y> 
</root> 
+0

我相信你有一個很好的最終答案,可以模擬所要求的結果,但OP正在尋找一種方法來生成你從他的XSD提供的Root。我相信某種xjc綁定魔法就是被要求的。手工編寫課程,忽略模式,是個壞消息。 – rektide 2013-10-11 06:59:12

+0

你是作者。好。我一個人期待xjc上課。 – rektide 2013-10-11 07:00:06

相關問題