2010-01-11 15 views
5

我需要從Java對象中生成一些XML文檔。這些對象是深度ORM映射對象,XML文檔用於搜索索引(la Lucene)。我希望能夠創建一個配置文件併爲其提供一個Java對象,並讓它吐出配置中指定的XML。理想情況下,配置將包括java端(可能是深層)的屬性到XPath的映射或非常類似於XML端的映射。什麼是從Java生成任意XML的好庫?

JAXB不合適,因爲它想要創建從對象數據到XML節點的一對一映射。我已經看過JIBX和XStream,但是他們都沒有被設計來做我正在談論的事情。

基本上我想要的是Dozer,但是它的目的是創建一個XML文檔作爲它的目標而不是另一個Java bean。從我迄今爲止的研究看來,我將不得不自己寫這篇文章。任何人都可以提供更好的選擇?

編輯: 該解決方案不能預測修改源Java文件的能力。基於註釋的系統對我的目的來說是完全無用的。應該可以像在推土機上一樣爲各個映射定義'譯員'。

需要注意的是,我需要能夠指定java中給定的輸入字段可能會在XML輸出中的多個不同位置輸出,可能在某些情況下會被轉換,而在其他情況下可能會被轉換。

我已經考慮過做某種直接的Java到XML轉換的對象,然後使用XSLT執行我的任務,但問題在於這些是具有雙向連接的深層對象。將對象映射到XML將很難確定對象層次結構的深度,即使它可以跟蹤哪些對象應該打折,因爲它們已經被看到了。

+0

JiBX應該對此好,你爲什麼不喜歡它? – skaffman 2010-01-11 23:35:06

回答

4

我用這個: Simple

+0

這似乎完全是基於註釋的。我希望能夠嚴格通過配置文件和潛在的一組翻譯器對象來完成我的目標,以正確格式化一些數據。此外,我沒有看到任何指定單個輸入屬性到多個輸出字段的方式。 – Jherico 2010-01-11 21:11:14

+0

upvoted,因爲這確實回答了原來的問題。 – 2010-01-11 21:14:50

+0

並非如此。我認爲我很明顯我*想要一個配置文件。 – Jherico 2010-01-11 21:39:11

1

你看着Castor

特別是,從他們的網頁的這句話讓我覺得它可能會做你想要什麼:

雖然可以依靠Castor的默認行爲編組和取消編組Java對象轉換爲XML文檔,可能需要對此行爲有更多的控制權。例如,如果Java對象模型已經存在,那麼Castor XML Mapping可以用作XML文檔和該Java對象模型之間的橋樑。

蓖麻允許指定某些使用映射文件其編組/解組行爲。該文件向Castor提供了有關給定的XML文檔和給定的一組Java對象如何相互關聯的明確信息。

另一種可能性可能是JXM;從他們的網頁:

Java XML映射(JXM)是一種將Java對象寫入XML並將其讀回的工具。 JXM提供了一個默認映射,以便通過調用單一方法將遵循Java Bean命名約定的Java對象寫入XML。默認映射可以通過使用JXM框架創建和註冊映射類來定製。

JXM不同於其他XML綁定工具,不需要對象包含或繼承JXM代碼。對象中不包含生成的代碼,並且它們不需要實現JXM接口。定製是通過編寫Java代碼而不是XML描述符來完成的。

+0

Castor看起來最接近我所看到的所有東西。但是,其以類爲中心的配置讓我懷疑它是否允許將相同輸入字段映射到多個輸出。我也看不到任何映射深層領域的例子。但我會進一步調查。 – Jherico 2010-01-11 21:37:55

0

看一看Xmappr

它可以通過外部XML配置。你可以有幾個映射從同一個輸入對象產生不同的輸出。

此外,我們願意幫助 - 只需在郵件列表上詢問。

0

過去我們使用Apache Velocity作爲簡化它的一種手段。

只需爲XML創建模板,填充數據結構並在地圖中插入數據結構即可。它允許您在需要時在運行時更改XML(只要您的數據結構具有所有字段)。

這是一種非常快速和靈活的方式來生成一個文檔,它不創建一個DOM,所以是非常簡潔的內存。

+0

不利的一面是,如果你搞砸了模板,在某些情況下你最終可能會生成無效/不正確的XML。 – 2010-01-12 07:36:00

+0

完全同意。這並不難解決。如果您願意,您可以添加一個單獨的驗證階段。 – Fortyrunner 2010-01-13 11:21:41

0
0

你不指定ORM使用,但如果萬一它是休眠,你可以用它做Java的< - > XML映射爲好。該文檔不如數據庫映射,但它不是很難使用。最大的好處是:你少了一點依賴性,少一個學習框架,以及你爲DB映射學到的概念,直到大多數應用於XML映射。

看到:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/xml.html

相關問題