2012-02-27 59 views
3

我正在研究如何在一個Java項目中將XML從一種格式轉換爲另一種格式。用Java轉換XML有哪些不同的方法?

有什麼替代方案,他們有什麼優點和缺點?

替代從來就迄今發現:

  1. XSLT/XQuery的
  2. XML結合兩種格式的Java和做在Java中映射
  3. Groovy的

回答

3

如果您正在將XML轉換爲XML,那麼如果您通過非XML表示(例如Java對象)進行操作,那麼您只能爲自己做更多的工作。使用高級聲明性語言是最好的選擇,這意味着XSLT或XQuery。

在選擇XSLT和XQuery時,我通常的建議是XSLT針對轉換進行了優化,XQuery針對查詢進行了優化。 「轉型」是指大多數投入出現在輸出中的任務,只是形式不同而已。通過「查詢」我的意思是從數據海中提取信息的塊。

當然,所有這些技術都有一個學習曲線,如果您有一個小的一次性工作要做,那麼這可能是選擇工具的有效因素。但對於執行XML和Java的項目來說,最好的建議是儘可能少使用Java。把它看作「一個Java項目」可能是一個糟糕的開始。

5

我投XSLT。它具有將轉換規則與java代碼分開的強大優勢。所以稍後,您可以輕鬆應對模式更改,而無需觸摸代碼。

and您可以隨時隨地測試/調試轉換 - 無需運行應用程序。

0

我也說:

  1. SAX可以簡單的實現是你的轉型是足夠簡單
  2. 如果
  3. XSLT轉換了或數據結構複雜,使用模式,需要一個堅實的基礎可維護性

另一種選擇是JDOM但只有當您有一個簡單的,類似於對象的數據結構並且不想使用模式時。

-1

看來事實上的標準是XSLT。我個人很討厭XSLT,因爲它冗長而且難以閱讀和維護。

我更喜歡FreeMarker和我發現,Java開發人員發現它更容易拿起和維護。 Freemarker建於XML support,包括xpath。您可以爲常見任務創建自定義的Freemarker標籤,以進一步提高重用性和可讀性並減少冗長。

一個我喜歡的freemarker的事情是,你可以注入的java助手和服務進入freemarker的情況下,你可以在你的模板調用方法。例如,這些方法可能會觸發您的數據庫。要在XSLT中執行此操作,我們使用將db錶轉換爲XML,然後遍歷模板中的XML節點,這些節點效率或效率都不高。

總之,Freemarker模板很可能是代碼做同樣的事情的線條作爲XSLT模板的1/3。因爲你可以使用Java助手,你可以優化與包含HashMap和套等你最終是更具可讀性和易於維護性能更好的模板查詢。

其中一個不利之處freemarker的XML支持的是,它是基於DOM。所以,如果你正在處理巨大的XML文檔,你會得到OutOfMemoryError異常。在另一方面XSLT是SAX基礎。

相關問題