2014-01-28 21 views
0

我做了一些研究,看了下面的表格(1),我試圖找出我應該使用什麼樣的API。在我的應用程序中使用什麼Java XML API - StAX或DOM?

讓我介紹這個問題我的應用程序中要解決:

我的應用程序監聽到所有的地方發射了觀察者的事件在一些觀察者類(從CDI例如事件)。在那個班裏,有觀察這些事件的方法。

我需要在觀察這些事件時即時構建XML文件。更具體地說,當我觀察事件「開始」時,我需要創建這個XML。

<start></start> 

後,當我觀察一些其他的活動,如「安裝」(不要緊它是如何真的叫),我需要有這樣的結構:

<start><installed></installed><start> 

每次我觀察到了一些事件,我需要能夠將該XML表示寫入外部文件。綜上所述,似乎我不能使用「SAX」,因爲SAX只是解析XML文檔,但我需要編寫它們或構建它們。接下來,我即將使用StAX或DOM,但是StAX是「僅向前」的,我不太明白它的含義,但是當我使用StAX API時,它的行爲如此(2),當它「向前」 「強制」手動啓動和結束元素,但這不適用於我的情況。我不知道什麼時候我要結束文檔生成,我只需要每次都有有效的xml來編寫它。

但是,有這種方法(3)說,當我打電話時,它會自動關閉所有元素。所以例如當我有這個:

<a> 
    <b></b> 
    <c> 
     <d> 
     </d> 

和我打電話writeEndDocument(),這是否意味着它會自動關閉「c」和「a」?

(1)http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

(2)http://docs.oracle.com/javase/tutorial/jaxp/stax/example.html#bnbgx

(3)http://docs.oracle.com/javase/6/docs/api/javax/xml/stream/XMLStreamWriter.html#writeEndDocument()

+0

考慮VTD-XML ......有關於此主題的文章http://www.javaworld。com/article/2071745/soa/simplify-xml-processing-with-vtd-xml.html –

回答

1

我推薦使用下面的XML庫(通過建議排序的;如果所述一個之前只使用下一個不適合你的需要):

  1. JAXB(使用對象而不是XML)
  2. StAX(低於JAXB的水平)
  3. SAX(僅用於閱讀;應該很少與JAXB和StAX的可用)
  4. DOM(應該很少與JAXB和StAX的現已使用)現在用
1

不要使用較低級別的XML技術(無論是SAX和DOM),除非你真的需要他們。我認爲情況並非如此。

使用JAXB。創建表示您的事件的類。每次獲得該類的事件創建實例並填充字段。每次您必須創建XML時,只需將實例編組到任何您想要的流(文件,套接字等等)。

+0

問題是,它會是某種記者應用程序,任何人都可以釋放他自己的事件,這些事件將被整理到XML中,所以我事先不知道每一個會被報告的對象。這意味着用戶必須提供正在報告的類的JAXB視圖。我寧願以某種方式轉發處理程序,讓用戶按照自己的意願編組他的對象。 – stewenson

+0

嗯,我認爲這不是什麼好主意。用戶可以實現他想要報告的對象的視圖,並在我觀察者觀察到的事件中發送該對象,並將其添加到結構中。 – stewenson

相關問題