2008-11-04 116 views
3

如果你有一個Java對象和XML架構(XSD),什麼是採取該對象,並將其與架構轉換爲XML文件中的行的最好方式。對象和模式不瞭解彼此(因爲java類不是從模式創建的)。Java對象到XML模式

例如,在類中,可能有一個整數字段'totalCountValue',它對應於xsd文件中名爲'countTotal'的元素。有沒有創建映射的方法,它會說「如果對象包含int totalCountValue,則創建一個名爲'countTotal'的元素並將其放入XML中。 類似地,有可能在該對象的字段應該被忽略,或者在其應當對應於多個XML元素的對象的列表。

我看着XStream,但沒有看到任何(顯而易見)的方式。還有其他XML庫可以簡化這項任務嗎?

+0

這個任務有更多的序列化器。 JiBX 請參閱此處瞭解更多信息:http://karussell.wordpress.com/2009/09/03/xml-serializers-for-java/ – Karussell 2010-02-26 13:03:55

回答

6

我相信這可以通過JAXB使用它的註解來實現。我通常發現使用XJC從JAXB生成對象(如在模式中定義的)要比映射現有的Java對象以匹配我的模式容易得多。因人而異。

4

我做對象做使用XStream XML序列化。這個序列化程序沒有找到「顯而易見」的東西嗎?一旦你掌握了它,它就非常簡單。

在這個例子中,你提供的,你可以有這樣的事情:

... 
XStream xstream = new XStream(new DomDriver()); 

xstream.alias("myclass", MyClass.class); 
xstream.aliasField("countTotal", MyClass.class, "totalCountValue"); 

String xml = xstream.toXML(this); 
... 

這個示例類:

class MyClass { 
    private int totalCountValue; 

    public MyClass() { 
    } 
} 

如果你能找到一些串行更簡單或比這個「酷」,請分享它與我們。我還找了變化......

檢查XStream的迷你教程here

+0

可悲的是,您無法使用xstream驗證模式... – Karussell 2010-02-26 13:02:33

2

我使用一個名爲JiBx做這項工作的一個Java庫。您需要編寫一個映射文件(使用XML)來描述您希望XML Schema元素映射到Java對象的方式。有幾個生成器工具可以幫助實現流程的自動化。另外它非常快。

1

您可以使用Apache Commons的庫,名爲Betwixt。它可以將一個bean映射到XML,然後再返回,如果你需要往返。

2

我嘗試了大多數庫建議,以查看哪一個是最適合我的需求。我也嘗試過一個在這裏沒有提到的庫,但是由一個同事建議,這是一個名爲Woodstox的StAX實現。

無可否認,我對所有這些圖書館的測試並不完整,但爲了在問題中提到的目的,我發現伍德斯托克斯是最好的。編組速度最快(在我的測試中,擊敗XStream大約30〜40%)。它也很容易使用和控制。

這種方法的缺點是創建的XML(因爲它是由我定義的)需要通過驗證程序運行,以確保其與模式的正確性。

0

我要說JAXB或蓖麻油。我發現Castor更容易使用,更可靠,但JAXB是標準的