簡體   English   中英

XMLStreamReader 和 XMLEventReader 有什么區別?

[英]What is the difference between XMLStreamReader and XMLEventReader?

我在網上沖浪。 我發現XMLStreamReader用於解析 XML 的 Cursor 樣式 API XMLEventReader用於解析 XML 的 Iterator 風格的 API。有人能詳細告訴我嗎?

看看解釋: https : //www.ibm.com/developerworks/library/x-stax1/

XMLStreamReader 和 XMLEventReader 都允許應用程序自行迭代底層 XML 流。 這兩種方法之間的區別在於它們如何公開已解析的 XML InfoSet 的各個部分。 XMLStreamReader 充當光標,指向最近解析的 XML 標記之外,並提供獲取有關它的更多信息的方法。 這種方法非常節省內存,因為它不會創建任何新對象。 但是,業務應用程序開發人員可能會發現 XMLEventReader 稍微更直觀,因為它實際上是一個標准的 Java 迭代器,可將 XML 轉換為事件對象流。 每個事件對象依次封裝與其所表示的特定 XML 結構有關的信息。 本系列的第 2 部分將詳細描述基於事件迭代器的 API。 至於使用哪種 API 樣式要視情況而定。 基於事件迭代器的 API 代表了一種比基於游標的 API 更面向對象的方法。 因此,它更容易應用於模塊化架構,因為當前的解析器狀態反映在事件對象中; 因此,應用程序組件在處理事件時不需要訪問解析器/讀取器。 此外,可以使用 XMLInputFactory 的 createXMLEventReader(XMLStreamReader) 方法從 XMLStreamReader 創建 XMLEventReader。

我認為不同之處在於流閱讀器實際上代表了事件。

XMLEvent event = eventReader.nextEvent();    
if(event.getEventType() == XMLStreamConstants.START_ELEMENT){
    StartElement startElement = event.asStartElement();
    System.out.println(startElement.getName().getLocalPart());
}

對比

streamReader.next();
if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT){
    System.out.println(streamReader.getLocalName());
}

所以每次為事件讀取器創建一個額外的事件對象。 由於有很多很多事件,開銷可能很大。

兩者之間的一個區別是XMLEventReader支持peek() ,而XMLStreamReader不支持。

暫無
暫無

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

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