国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

StAX---基于事件的拉式XML解析

RdouTyping / 2936人閱讀

摘要:而正好相反,采用一種拉的方式,由應(yīng)用程序主動(dòng)從解析器中獲取當(dāng)前事件然后更具需求處理保存或者忽略。通過將解析器事件變成一級(jí)對(duì)象,從而讓應(yīng)用程序可以采用面向?qū)ο蟮姆绞教幚硭鼈儭?/p>

簡(jiǎn)介

StAX,全稱Streaming API for XML,一種全新的,基于流的JAVA XML解析標(biāo)準(zhǔn)類庫(kù)。其最終版本于 2004 年 3 月發(fā)布,并成為了 JAXP 1.4(將包含在即將發(fā)布的 Java 6 中)的一部分。在某種程度上來說,StAX與SAX一樣是基于XML事件的解析方式,它們都不會(huì)一次性加載整個(gè)XML文件。但是它們之間也有很大的不同。

與SAX相比

雖然StAX與SAX一樣基于XML事件解析,相比于DOM將整個(gè)XML加載進(jìn)內(nèi)存來說效率高。不同的是,StAX在在處理XML事件的方式上使得應(yīng)用程序更接近底層,所以在效率上比SAX更優(yōu)秀。

使用SAX時(shí),我們知道XML事件是由解析器調(diào)用開發(fā)人員編寫的回調(diào)方法來處理的,也就是說應(yīng)用程序是被動(dòng)于解析器的。應(yīng)用程序只能被動(dòng)的等待解析器將XML事件推送給自己處理,對(duì)于每一種事件都需要在解析開始之前就做好準(zhǔn)備。這種方式被稱為‘推(push)‘。
而StAX正好相反,StAX采用一種‘拉(pull)‘的方式,由應(yīng)用程序主動(dòng)從解析器中獲取當(dāng)前XML事件然后更具需求處理(保存或者忽略)。StAX使得應(yīng)用程序掌握了主動(dòng)權(quán),可以簡(jiǎn)化調(diào)用代碼來準(zhǔn)確地處理它預(yù)期的內(nèi)容,或者發(fā)生意外時(shí)停止解析。此外,由于該方法不基于處理程序回調(diào),應(yīng)用程序不需要像使用 SAX 那樣模擬解析器的狀態(tài)。

簡(jiǎn)單入門

獲取解析器工廠
與其他解析技術(shù)一樣,在使用StAX解析器之前也需要獲取其工廠類。

import java.io.InputStream;  
import java.io.OutputStream;  
import javax.xml.stream.XMLInputFactory;  
import javax.xml.stream.XMLOutputFactory;  
  
  
public class StAX_Frist {  
 public void writeXMlByStream(OutputStream out){  
     XMLOutputFactory outFactor=XMLOutputFactory.newInstance();//寫解析器工廠  
     .......  
 }  
    public void  readXmlByStream(InputStream in){  
          
        XMLInputFactory inFactory=XMLInputFactory.newInstance();//讀解析器工廠  
        .......  
    } 
主要API

StAX 實(shí)際上包括兩套處理 XML 的 API,分別提供了不同程度的抽象。基于指針(Cursor)的 API 允許應(yīng)用程序把 XML 作為一個(gè)標(biāo)記(或事件)流來處理。在這里,解析器就像一跟指針一樣在文件流上前進(jìn),應(yīng)用程序可以跟隨解析器從文件的開頭一直處理到結(jié)尾。這是一種低層 API,盡管效率高,但是沒有提供底層 XML 結(jié)構(gòu)的抽象。Cursor API 由兩個(gè)主要API組成,XMLStreamReader和XMLStreamWriter,分別由XMLInputStreamFactory和XMLOutputStreamFactory獲取。
使用Cursor API 讀XML文件:

import java.io.InputStream;  
import javax.xml.stream.XMLInputFactory;;  
import javax.xml.stream.XMLStreamConstants;  
import javax.xml.stream.XMLStreamReader;  
  
  
public class StAX_Frist {  
      
    public void  readXmlByStream(InputStream in){  
          
        XMLInputFactory inFactory=XMLInputFactory.newInstance();//讀解析器工廠  
          
  
        try {  
            XMLStreamReader reader=inFactory.createXMLStreamReader(in);//獲取讀解析器  
            while(reader.hasNext()){//reader.hasNext();說明文件未到結(jié)尾。  
                int eventId=reader.next();  
                switch (eventId) {  
                case XMLStreamConstants.START_DOCUMENT:  
                    System.out.println("start docmuent");  
                    break;  
                      
                case XMLStreamConstants.START_ELEMENT:  
                    System.out.println("<"+reader.getLocalName()+">");  
                    for(int i=0;i");  
                      
                    break;  
                case XMLStreamConstants.END_DOCUMENT:  
                    System.out.println("end docmuent");  
                    break;  
                default:  
                    break;  
                }  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

另外一種是較為高級(jí)的基于迭代器(Iterator)的 API ,它允許應(yīng)用程序把 XML 作為一系列事件對(duì)象來處理,每個(gè)對(duì)象和應(yīng)用程序交換 XML 結(jié)構(gòu)的一部分。應(yīng)用程序只需要確定解析事件的類型,將其轉(zhuǎn)換成對(duì)應(yīng)的具體類型,然后利用其方法獲得屬于該事件的信息?;谑录鞯姆椒ň哂幸粋€(gè)基于指針的方法不具備的重要優(yōu)點(diǎn)。通過將解析器事件變成一級(jí)對(duì)象,從而讓應(yīng)用程序可以采用面向?qū)ο蟮姆绞教幚硭鼈?。這樣做有助于模塊化和不同應(yīng)用程序組件之間的代碼重用。Iterator API 由兩個(gè)主要API組成,XMLEventReader和XMLEventWriter,分別由XMLInputStreamFactory和XMLOutputStreamFactory獲取。
使用Iterator API 讀XML文件:

import java.io.InputStream;  
import java.util.Iterator;  
import javax.xml.stream.XMLEventReader;  
import javax.xml.stream.XMLInputFactory;  
import javax.xml.stream.XMLStreamConstants;  
import javax.xml.stream.events.Attribute;  
import javax.xml.stream.events.Characters;  
import javax.xml.stream.events.StartElement;  
import javax.xml.stream.events.XMLEvent;  
  
   public class StAX_Frist {  
      
           public void  readXmlByEvent(InputStream in){  
          
        XMLInputFactory factory=XMLInputFactory.newInstance();//獲取解析器工廠  
        try {  
            XMLEventReader reader=factory.createXMLEventReader(in);//獲取解析器  
            while(reader.hasNext()){  
            XMLEvent event=reader.nextEvent();  
              
                switch (event.getEventType()) {  
                case XMLStreamConstants.START_DOCUMENT:  
                    System.out.println("start docmuent");  
                    break;  
                      
                case XMLStreamConstants.START_ELEMENT:  
                    StartElement element=(StartElement)event;  
                    System.out.println("<"+element.getName().getLocalPart()+">");  
                    for(Iterator it=element.getAttributes();it.hasNext();){  
                        Attribute attr=(Attribute) it.next();  
                        System.out.println(attr.getName().getLocalPart()+"="+attr.getValue());  
                    }  
                    break;  
                      
                case XMLStreamConstants.CHARACTERS:  
                    Characters charData=(Characters)event;  
                    if(charData.isIgnorableWhiteSpace()&&charData.isWhiteSpace()){  
                        break;  
                    }  
                    System.out.println(charData.getData());  
                    break;  
                case XMLStreamConstants.END_ELEMENT:  
                    element=(StartElement)event;  
                    System.out.println("");  
                      
                    break;  
                case XMLStreamConstants.END_DOCUMENT:  
                    System.out.println("end docmuent");  
                    break;  
                default:  
                    break;  
                }  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/110364.html

相關(guān)文章

  • StAX---基于事件拉式XML解析

    摘要:而正好相反,采用一種拉的方式,由應(yīng)用程序主動(dòng)從解析器中獲取當(dāng)前事件然后更具需求處理保存或者忽略。通過將解析器事件變成一級(jí)對(duì)象,從而讓應(yīng)用程序可以采用面向?qū)ο蟮姆绞教幚硭鼈儭? 簡(jiǎn)介 StAX,全稱Streaming API for XML,一種全新的,基于流的JAVA XML解析標(biāo)準(zhǔn)類庫(kù)。其最終版本于 2004 年 3 月發(fā)布,并成為了 JAXP 1.4(將包含在即將發(fā)布的 Java 6...

    singerye 評(píng)論0 收藏0
  • jersey 框架傳輸格式 (2) xml

    摘要:作為日常開發(fā)中一種常用的傳輸格式。對(duì)應(yīng)的,定義了三種標(biāo)準(zhǔn)類型的輸入接口和輸出接口,。實(shí)體類如果請(qǐng)求的傳輸數(shù)據(jù)量很大,并且無需和外系統(tǒng)對(duì)接的場(chǎng)景,建議使用屬性來組織,這樣可以極大的減小格式的數(shù)據(jù)包的規(guī)模。如有版權(quán)侵犯,請(qǐng)聯(lián)系郵箱。 XML作為日常開發(fā)中一種常用的傳輸格式。jersey 也做了很優(yōu)秀的支持。 我學(xué)習(xí) 《Java RESTful Web Service 實(shí)戰(zhàn)》 一書。書中有...

    betacat 評(píng)論0 收藏0
  • jersey 框架傳輸格式 (2) xml

    摘要:作為日常開發(fā)中一種常用的傳輸格式。對(duì)應(yīng)的,定義了三種標(biāo)準(zhǔn)類型的輸入接口和輸出接口,。實(shí)體類如果請(qǐng)求的傳輸數(shù)據(jù)量很大,并且無需和外系統(tǒng)對(duì)接的場(chǎng)景,建議使用屬性來組織,這樣可以極大的減小格式的數(shù)據(jù)包的規(guī)模。如有版權(quán)侵犯,請(qǐng)聯(lián)系郵箱。 XML作為日常開發(fā)中一種常用的傳輸格式。jersey 也做了很優(yōu)秀的支持。 我學(xué)習(xí) 《Java RESTful Web Service 實(shí)戰(zhàn)》 一書。書中有...

    The question 評(píng)論0 收藏0
  • JDK 5 ~ 10 新特性傾情整理!

    摘要:最近連都在準(zhǔn)備發(fā)布的路上了,大家都整明白了嗎也許現(xiàn)在大部分人還在用,的新特性都沒用熟,剛出不久,就不用說了。 最近連 JDK11都在準(zhǔn)備發(fā)布的路上了,大家都整明白了嗎?也許現(xiàn)在大部分人還在用6-8,8的新特性都沒用熟,9剛出不久,10-11就不用說了。 為了大家對(duì)JDK有一個(gè)全面的了解,下面我為大家整理了JDK5~10的所有關(guān)鍵新特性! JDK5新特性 自動(dòng)裝箱與拆箱 枚舉 靜態(tài)導(dǎo)...

    godiscoder 評(píng)論0 收藏0
  • 用友云微服務(wù)架構(gòu)下配置文件管理利器:配置中心

    摘要:而且,用友云配置中心以服務(wù)的方式提供統(tǒng)一的管理界面,結(jié)合用友云的認(rèn)證中心可以提供可靠的安全保障。 微服務(wù)架構(gòu)是這幾年IT領(lǐng)域的一個(gè)高頻詞匯,越來越多的項(xiàng)目和應(yīng)用正在以微服務(wù)的思想進(jìn)行重構(gòu)。相比于單體應(yīng)用和SOA架構(gòu),微服務(wù)優(yōu)勢(shì)也逐漸凸顯,被廣大架構(gòu)師和技術(shù)人員引入和推崇。當(dāng)然,單體應(yīng)用、SOA、微服務(wù)等各有優(yōu)勢(shì)和不足。單體架構(gòu)在早期的企業(yè)內(nèi)部信息化或者搭建中小型項(xiàng)目時(shí)很常見,簡(jiǎn)單說就是...

    jayce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<