真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用Java結(jié)合SAX2.0解析XML文檔

這篇文章主要為大家展示了“怎么用Java結(jié)合SAX 2.0 解析XML文檔”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“怎么用Java結(jié)合SAX 2.0 解析XML文檔”這篇文章吧。

成都創(chuàng)新互聯(lián)始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達十載累計超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的營銷解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:成都廣告制作等企業(yè),備受客戶贊揚。

/*
自從XML真正形成以來(我認(rèn)為是Org.w3c組織發(fā)布XML標(biāo)準(zhǔn)時開始),XML得到了很快的發(fā)展,
 很多廠商都有推出了自己的XML解析器,如apache的xalan,IBM的xerces,sun的Jdom等,不過這些都是在
 基于JAXP(Java api for XML processing)的,從jdk 1.4.0開始的后續(xù)j2sdk里都附加了JAXP,這給開發(fā)人員
 帶來了很大的方便,這使得我們在處理一般的XML功能上的問題時不再需要去用第三方的XML處理器了.
 隨著XML的迅速發(fā)展,SAX也從1.0到了現(xiàn)在的2.0了(還是能夠和1.0兼容),結(jié)構(gòu)上有了一些較大的變化.

 DOM(document object model)每次讀取XML節(jié)點時都要把它load到內(nèi)存里來,在文檔很大時,就顯得很慢了,SAX(simple API for XML),是一個XML解析器的接口,它比DOM更低級一些,它是一種基于事件和回調(diào)模式的XML處理方式, 因此在解析速度上DOM是沒法比的(當(dāng)要解析的XML文檔很大的時更是如此).那么在SAX中事件響應(yīng)(event)是什么呢 ? 我個人認(rèn)為這一點和swing,AWT中的事件義有點相似的,都有是指在觸發(fā)某些特定的行為時所做的處理,如:mouse 的click事件等到. 這里則是指碰到特定的XML節(jié)點的所做的處理,如文檔開始(startDocument),文檔結(jié)束(endDocument),元素開始(startElement)等很多,大家看一下SAX的API中的方法名字就知道有哪些事件了,基本上可以做到見文知義的.在只想分析XML內(nèi)容(只讀),要求高性能,靈活性 能夠定位錯誤信息(SAX能夠定位錯誤的行列位置)時,最好用SAX來做. 一般情況下SAX是按下面的原理去使用的:
 <1>設(shè)置事件處理器(SAX 1.0是使用一個通過繼承HandlerBase類的實例來設(shè)置的,SAX 2.0則是繼承DefaultHandler的,還有用XMLReader方式的,在原理上沒有很大的區(qū)別)
 <2>載入要解析的內(nèi)容
 <3>在需要解析的事件方法里(具體參見SAX API文檔)加入自己的控制邏輯.
 <4>重復(fù)<3>直到解析完為止. 
 
 在這里我自己寫了一個描述電影海報信息的XML文件(file.xml),用SAX2.0寫了一個很簡單的XML內(nèi)容閱讀器來解析它, 和大家交流一下自己的心得.程序在我的機器上經(jīng)過了測試的(OS: Win2k Advanced Server(English version),
 intel pentium cpu, 256M RAM)
*/

import org.w3c.dom.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

class MyXMLReader extends DefaultHandler

 //Fields
 private int index;
 private Locator locator;

 //Constructor
 public MyXMLReader(){
 super(); //it must be done !
 }

 //nain method
 public static void main(String[] args){
 try{ 
  SAXParserFactory sf  = SAXParserFactory.newInstance();
  SAXParser sp = sf.newSAXParser();
  MyXMLReader reader = new MyXMLReader();
  sp.parse(new Inputsource("film.xml"),reader);
 }
 catch(Exception e){
 e.printStackTrace();
 }
 } 

 //Response the startDocument event
 public void startDocument() {
 System.out.println("n********************************* (: 元旦電影海報 :) ***********************************n");
 } 

//Response the startElement event
 public void startElement(String uri, String localName, String qName, Attributes attrs){ 
 if( qName.equalsIgnoreCase("film") ){ 
 index ++; 
 int attrCount = attrs.getLength();
 for( int i = 0; i < attrCount; i ++ ){
 String attrName = attrs.getQName(i);
 if( attrName.equalsIgnoreCase("name") ){
 System.out.println("t第" + index + "場,片名:<<" +  attrs.getValue(i) + ">>");
 }
 if( attrName.equalsIgnoreCase("price") ){
 System.out.println("t票價:" + attrs.getValue(i) ); 
 }
 if( attrName.equalsIgnoreCase("station") ){
 System.out.println("t放映地點:" + attrs.getValue(i) ); 
 }
 if( attrName.equalsIgnoreCase("time") ){
 System.out.println("t放映時間:" + attrs.getValue(i) );
 }
 if( attrName.equalsIgnoreCase("describtion") ){
 System.out.println("t影片簡介:" + attrs.getValue(i) );
 }
 System.out.println();
 }
 }

 //Response the endDocument event
 public void endDocument(){
 System.out.println("ttttttt------ 共有" + index + "場電影要放映"); 
 }

 //Response the endElement event
 public void endElement(String uri, String localName, String qName){
   //add your codes if neccessary ...
 }

 //Print the fata error information
 public void fatalError(SAXParseException e){
 System.out.println("nFatal error information -->");
 System.out.println("t" + e.getMessage());
 System.out.println("tAt line " + locator.getLineNumber() +
  ",column " + locator.getColumnNumber());
 }
 
 //Print the usual error information
 public void error(SAXParseException e){
 System.out.println("nUsual error information -->"); 
 System.out.println("t" + e.getMessage());
 System.out.println("tAt line " + locator.getLineNumber() +
  ",column " + locator.getColumnNumber());
 }
 
 //Print the warning information
 public void warning(SAXParseException e){
 System.out.println("nWarning information -->"); 
 System.out.println("t" + e.getMessage()); 
 System.out.println("tAt line " + locator.getLineNumber() +
  ",column " + locator.getColumnNumber());
 }

 //Store the error locator object
 public void setDocumentLocator(Locator lct){
 locator = lct;
 }

}//End class MyXMLReader

附: film.xml完全的內(nèi)容:


 

以上是“怎么用Java結(jié)合SAX 2.0 解析XML文檔”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站標(biāo)題:怎么用Java結(jié)合SAX2.0解析XML文檔
文章起源:http://weahome.cn/article/jidpgc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部