簡體   English   中英

在我的應用程序中使用什么Java XML API - StAX或DOM?

[英]What Java XML API to use in my app - StAX or DOM?

我做了一些研究,看了下面的表格(1),我試圖找出我應該使用什么樣的API。

讓我介紹一下我的應用程序要解決的問題:

我的應用程序在某些觀察者類中偵聽從所有位置(例如來自CDI的事件)觸發的一些觀察者事件。 在該類中,有一些方法可以觀察這些事件。

我需要在觀察這些事件時即時構建XML文件。 更具體地說,當我觀察事件“start”時,我需要創建這個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()

我建議使用以下XML庫(按推薦排序;如果之前的那個不適合您,則僅使用下一個):

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

除非確實需要,否則不要使用低級XML技術(SAX或DOM)。 我相信情況並非如此。

使用JAXB。 創建代表您的事件的類。 每次獲取事件時都會創建此類的實例並填充字段。 每次必須創建XML時,只需將實例封送到您想要的任何流(文件,套接字等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM