版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、StAXThe Streaming API for XML (StAX)王健StAX:This is the homepage for the StAX Reference Implementation (RI). StAX is a standard XML processing API that allows you to stream XML data from and to your application. This StAX implementation is the standard pull parser(拉解析) implementation for JSR-173 spec
2、ification. Features of the Reference Implementation:Small memory footprintImplementation of most core features: non-validating DTD-aware parser and serializerOpen Source (Apache License (AL) 2.0)Features of StAX API:The standard pull parser interface (included in JDK 1.6,(已經(jīng)包含到j(luò)dk1.6里面) downloadable
3、 separately for 1.4, 1.5) StAX 概述 從一開始,Java API for XML Processing (JAXP) 就提供了兩種方法來處理 XML:文檔對象模型(DOMDocument Object Model文檔對象模型)方法是用標(biāo)準(zhǔn)的對象模型表示 XML 文檔;Simple API for XML (SAX簡單XML訪問接口) 方法使用應(yīng)用程序提供的事件處理程序來處理 XML。JSR-173 提出了一種面向流的新方法:Streaming API for XML (StAX)。其最終版本于 2004 年 3 月發(fā)布,并成為了 JAXP 1.4(將包含在即將發(fā)布
4、的 Java 6 中)的一部分。 如其名稱所暗示的那樣,StAX 把重點(diǎn)放在流上。實(shí)際上,StAX 與其他方法的區(qū)別就在于應(yīng)用程序能夠把 XML 作為一個(gè)事件流來處理。將 XML 作為一組事件來處理的想法并不新穎(事實(shí)上 SAX 已經(jīng)提出來了),但不同之處在于 StAX 允許應(yīng)用程序代碼把這些事件逐個(gè)拉出來,而不用提供在解析器方便時(shí)從解析器中接收事件的處理程序。 基本原理 應(yīng)用程序首先必須獲得一個(gè)具體的XMLInputFactory。根據(jù)傳統(tǒng)的 JAXP 風(fēng)格,要用到抽象工廠模式;XMLInputFactory類提供了靜態(tài)的newInstance(或是newFactory)方法,它負(fù)責(zé)定位和實(shí)
5、例化具體的工廠。配置該實(shí)例可設(shè)置定制或者預(yù)先定義好的屬性(其名稱在類 XMLInputFactory 中定義)。最后,為了使用基于指針的 API,應(yīng)用程序還要通過調(diào)用某個(gè)createXMLStreamReader方法獲得一個(gè)XMLStreamReader。如果要使用基于事件迭代器的 API,應(yīng)用程序就要調(diào)用createXMLEventReader方法獲得一個(gè)XMLEventReader 為什么使用 StAX? 開始學(xué)習(xí)一種新的處理 XML 的 API 之前,可能要問是否值得這樣做。事實(shí)上,StAX 所采用的基于拉的方法和其他方法相比有一些突出的優(yōu)點(diǎn)。首先,不管使用哪種 API 風(fēng)格,都是應(yīng)用程
6、序調(diào)用讀取器(解析器)而不是相反。通過保留解析過程的控制權(quán),可以簡化調(diào)用代碼來準(zhǔn)確地處理它預(yù)期的內(nèi)容。或者發(fā)生意外時(shí)停止解析。此外,由于該方法不基于處理程序回調(diào),應(yīng)用程序不需要像使用 SAX 那樣模擬解析器的狀態(tài)。StAX 仍然保留了 SAX 相對于 DOM 的優(yōu)點(diǎn)。通過把重心從結(jié)果對象模型轉(zhuǎn)移到解析流本身,從理論上說應(yīng)用程序能夠處理無限的 XML 流,因?yàn)槭录逃械呐R時(shí)性,不會在內(nèi)存中累積起來。對于那些使用 XML 作為消息傳遞協(xié)議而非表示文檔內(nèi)容的那些應(yīng)用程序尤其重要,比如 Web 服務(wù)或即時(shí)消息應(yīng)用程序。比方說,如果只是將其轉(zhuǎn)換成特定于應(yīng)用程序的對象模型然后就將其丟棄,那么為 Web 服
7、務(wù)路由器 servlet 提供一個(gè) DOM 就沒有多少用處。使用 StAX 直接轉(zhuǎn)化成應(yīng)用程序模型效率更高。對于 Extensible Messaging and Presence Protocol(XMPP)客戶機(jī),根本不能使用 DOM,因?yàn)?XMPP 客戶機(jī)/服務(wù)器流是隨著用戶輸入的消息實(shí)時(shí)生成。等待流的關(guān)閉標(biāo)簽(以便最終建立 DOM)就意味著等待整個(gè)會話結(jié)束。通過把 XML 作為一系列的事件來處理,應(yīng)用程序能夠以最合適的方式響應(yīng)每個(gè)事件(比如顯示收到的即時(shí)消息等等)。由于其雙向性,StAX 也支持鏈?zhǔn)教幚?,特別是在事件層上。接收事件(無論什么來源)的能力被封裝在 XMLEventCons
8、umer(XMLEventWriter 的擴(kuò)展)接口中。因此,可以模塊化地編寫應(yīng)用程序從 XMLEventReader(也是一個(gè)普通的迭代器,可以按迭代器處理)讀取和處理 XML 事件、然后傳遞給事件消費(fèi)者(如果需要可以進(jìn)一步擴(kuò)展處理鏈)。在第 2 部分將看到,也可使用應(yīng)用程序提供的篩選器(實(shí)現(xiàn)了 EventFilter 接口的類)來定制 XMLEventReader 或者使用 EventReaderDelegate 修飾已有的 XMLEventReader??偠灾?,和 DOM 以及 SAX 相比,StAX 使應(yīng)用程序更貼近底層的 XML。使用 StAX,應(yīng)用程序不僅可以建立需要的對象模型(
9、而不需要處理標(biāo)準(zhǔn) DOM),而且可以隨時(shí)這樣做,而不必等到解析器回調(diào)。下一節(jié)將深入討論基于指針的 API 以及如何有效地使用它處理 XML 流。StAX VS SAX:StAX比SAX更加簡單易用。StAX可以讀寫XML文檔,而SAX只可以讀文檔。下圖上各種解析方式的對比:快速示例:以下是一段基本的XML文件:快速示例:使用StAX對文進(jìn)行解析:快速示例:幾個(gè)關(guān)鍵點(diǎn):XMLStreamReader.hasNext() 判斷是否還有下一個(gè)節(jié)點(diǎn),如元素或是文本。Int next = XMLStreamReader.next() 返回一個(gè)整數(shù),確定是何種元素。XMLStreamReader.getL
10、ocalName() 返回元素的節(jié)點(diǎn)名稱。XMLStreamReader.getText() 返回文本。XMLStreamReader.getAttributeValue(nameSpace,attName) 返回屬性值。使用XMLStreamReader解析 XML 示例2:使用 StAX 編寫 XML 文檔/* Rose*/Testpublic void testB() throws Exception XMLOutputFactory factory = XMLOutputFactory.newFactory();XMLStreamWriter writer = factory.createXMLStreamWriter(System.out);writer.writeStartDocument(UTF-8, 1.0);/文檔開始writer.writeStartElement(users);/文本的根元素writer.writeStartElement(user);writer.writeAttribu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《材料成形數(shù)字化設(shè)計(jì)》教學(xué)大綱
- 教案第一課神奇的貨幣
- 玉溪師范學(xué)院《數(shù)學(xué)建?!?021-2022學(xué)年第一學(xué)期期末試卷
- 玉溪師范學(xué)院《小學(xué)生學(xué)習(xí)指導(dǎo)》2023-2024學(xué)年第一學(xué)期期末試卷
- 離職社保停交情況說明-文書模板
- 2024年電腦刺繡機(jī)項(xiàng)目評估分析報(bào)告
- 2024年煤制烯烴項(xiàng)目綜合評估報(bào)告
- 2024年電熱帶項(xiàng)目評估分析報(bào)告
- 倉儲合同實(shí)訓(xùn)結(jié)果
- 采購合同續(xù)簽申請書給領(lǐng)導(dǎo)打報(bào)告
- 2022年住宅室內(nèi)裝飾裝修管理辦法全文
- 消弧線圈基礎(chǔ)施工方案
- 小學(xué)一年級數(shù)學(xué)小學(xué)一年級數(shù)學(xué)新思維訓(xùn)練(課堂PPT)
- 物流管理結(jié)課論文
- 《大夢想家》歌詞--TFBOYS
- 冬季車主講堂資料
- 廈門島生活垃圾處置現(xiàn)狀與未來工作展望
- 完整版用PLCs7-200實(shí)現(xiàn)接觸器互鎖的電動(dòng)機(jī)正反轉(zhuǎn)控制電路的編程安裝與接線文檔良心出品
- 用馬克思主義哲學(xué)原理解讀統(tǒng)籌兼顧科學(xué)方法
- 混合痔診療方案
- 八年級音樂上冊 第2單元《漁歌》課件3 花城版
評論
0/150
提交評論