我做了一些研究,看了下面的表格(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()
考慮VTD-XML ......有關於此主題的文章http://www.javaworld。com/article/2071745/soa/simplify-xml-processing-with-vtd-xml.html –