国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在JDK 6.0中基于StAX分析XML數據

2019-11-18 11:35:15
字體:
來源:轉載
供稿:網友

  J2EE/xml開發者通常都是使用文檔對象模型(DOM)API或簡單的API for XML(SAX) API來分析XML文檔。然而,這些API都有其缺點。其中,DOM API的缺點之一是消耗大量的內存,因為在該XML文檔可以被導航之前,必須創建一個完整的XML文檔的內存結構。而SAX API的缺點在于,它實例了一種推分析模型API,其中分析事件是由分析器生成的。比較之下,StAX則是基于一種拉分析模型。在本文中,你將首先創建你自己的XML文檔,然后學習使用各種不同方法來對之進行分析;最后,我們使用事件生成的StAX拉方法。

  一、 推分析之于拉分析

  比較于推分析,拉分析具有如下一些優點:

  1. 在拉分析中,事件是由分析應用程序生成的,因此把分析規則提供到客戶端而不是分析器。

  2. 拉分析的代碼更簡單并且它比推分析有更少的庫。

  3. 拉分析客戶端能同時讀多個XML文檔。

  4. 拉分析答應你過濾XML文檔并且跳過分析事件。

  二、 了解StAX

  針對于XML的流式API(StAX),是在2004年3月的JSR 173規范中引入,這是一種針對XML的流式拉分析API。StAX是JDK 6.0提供的一種新特征,你可以從此處下載它的測試版本試用。

  一個推模型分析器不斷地生成事件,直到XML文檔被完全分析結束。但是,拉分析由應用程序進行調整;因此,分析事件是由應用程序生成的。這意味著,使用StaX,你可以推遲分析-在分析時跳過元素并且分析多個文檔。在使用DOM API的時候,你必須把整個的XML文檔分析成一棵DOM結構,這樣也就降低了分析效率。而借助于StAX,在分析XML文檔時生成分析事件。有關于StAX分析器與其它分析器的比較在此不多介紹。

  StAX API的實現是使用了java Web服務開發(JWSDP)1.6,并結合了Sun Java流式XML分析器(SJSXP)-它位于javax.xml.stream包中。XMLStreamReader接口用于分析一個XML文檔,而XMLStreamWriter接口用于生成一個XML文檔。XMLEventReader負責使用一個對象事件迭代子分析XML事件-這與XMLStreamReader所使用的光標機制形成對照。本教程將基于JDK 6.0中的StAX實現來完成對一個XML文檔的分析。

  其實,StaX僅僅是JDK 6.0所提供的XML新特征之一。新的JDK 6.0還提供了對針對于XML-Web服務的Java架構(JAX-WS)2.0,針對于XML綁定的Java API(JAXB) 2.0,XML數字簽名API的支持,甚至還支持SQL:2003 'XML'數據類型。

  三、 初步安裝

  假如你正在使用JDK 6.0,那么默認情況下,StAX API位于Classpath中。假如你在使用JWSDP 1.6,請把JWSDP 1.6 StAX API添加到classpath中。這需要把<jwsdp-1.6>/sjsxp/lib/ jsr173_api.jar和<jwsdp-1.6>/sjsxp/lib/sjsxp.jar添加到CLASSPATH變量中。在<jwsdp-1.6>目錄下安裝JWSDP 1.6。Jsr173_api.jar相應于JSR-173 API JAR,Sjsxp.jar相應于SJXSP實現JAR。

四、 使用XMLStreamWriter進行寫操作

  首先,你要創建將待分析的XML文檔。由StAX的XMLStreamWriter生成XML。然而,XMLStreamWriter的一個限制是,它不一定會生成良構的文檔-而且生成的文檔也不一定是有效的。你需要確保生成的XML文檔是良構的。列表1是一個由XMLStreamWriter生成的原始XML文檔的示例。

  在此,你試圖使用XMLStreamWriter API生成列表1中的catalog.xml。在本節中的代碼片斷節選自XMLWriter.java應用程序,顯示于列表2中。首先,你將導入StAX包類,請參考下列編碼:

import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.stream.XMLOutputFactory;
  你要從一個XMLOutputFactory中得到你的XMLStreamWriter。因此,首先你必須創建一個新的XMLOutputFactory:

XMLOutputFactory outputFactory=XMLOutputFactory.newInstance();
  接下來,創建一個FileWriter以輸出XML文檔-它將被生成到一個XML文件中:

FileWriter output=new FileWriter(new File("C:/STAX/catalog.xml"));
  接下來,創建一個XMLStreamWriter:

XMLStreamWriter XMLStreamWriterr=outputFactory.createXMLStreamWriter(output);
  現在,使用writeStartDocument()方法創建一個文檔開頭。添加要在XML聲明中指定的編碼和版本(記住,指定的編碼并不是生成的XML文檔的編碼)。假如你需要指定XML文檔的編碼,該怎么辦呢?當從一個XMLOutputFactory對象創建一個XMLStreamWriter對象時,你會這樣做:

XMLStreamWriter.writeStartDocument("UTF-8","1.0");
  使用writeComment()方法以輸出一個注釋:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 山东| 霍山县| 临武县| 云梦县| 福泉市| 商都县| 富民县| 肃南| 彰化市| 八宿县| 蒙山县| 罗定市| 高平市| 木里| 浑源县| 凌海市| 霸州市| 平湖市| 汽车| 郴州市| 泰顺县| 鹿泉市| 建湖县| 清新县| 长海县| 宜章县| 贵港市| 钟祥市| 宜州市| 镇原县| 米易县| 出国| 武隆县| 余干县| 普陀区| 泾源县| 新巴尔虎右旗| 赤城县| 旌德县| 夏津县| 瑞金市|