2013-12-20 29 views
1

我仍在試驗SimpleXML框架。作爲第一步,我解析較大的XML文件,然後立即再次發射它作爲XML,即我的測試程序,到目前爲止是這樣的:如何使用SimpleXML框架強制執行特定的序列化順序?

Persister serializer = new Persister(new TypeMatcher()); 
File source = new File(filenameIn); 
List myList = serializer.read(List.class, source); 
serializer.write(myList, outfile); 

這工作都很好,不過,我注意到的是,這列表的字段以錯誤的順序發出!

,我的名單必須遵循的模式如下:

<xs:element name="list"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="properties" type="Properties" maxOccurs="1" minOccurs="1" /> 
      <xs:element name="columns" type="Columns" maxOccurs="unbounded" minOccurs="1" /> 
      <xs:element name="items" type="Items" maxOccurs="unbounded" minOccurs="0" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

當列表被寫入,但是,我得到的順序是:

<list> 
    <items> 
     ... 
    </items> 
    <properties ...> 
    ... 
    </properties> 
    <columns> 
    ... 
    </columns> 
</list> 

即項目,這應該是來最後,首先發射。這會在稍後再次讀取時導致錯誤,因爲這些項引用了在列中定義的數據,如果該順序未被維護,那麼這些數據仍然是未定義的。

M.

回答

2

有關係列化維持秩序可以使用@Order註釋(見this tutorial)。

此外,在使用簡單框架序列化的特定上下文中,Java List通常不保證順序,但您可以使用LinkedList作爲此事。

+0

「此外,Java列表通常不保證順序」。呃,從什麼時候開始? – Dogcat

+0

@Dogcat,感謝您的支持;這個陳述並不明顯是關於簡單框架序列化而不是Java本身。現在編輯的答案提到了這一點。 – zeiky

+0

啊,對不起:D你的話對我有一個奇怪的影響:我花了3個小時刷新了我對Java Collections的知識,試圖理解你的意思。 – Dogcat

相關問題