菜鳥學(xué)習(xí)之Android中pull解析xml原理

我們?cè)陂_發(fā)Android app的時(shí)候,常常用到對(duì)數(shù)據(jù)進(jìn)行解析,最常用的就是對(duì)xml,與json解析。json基本都是用到解析框架,fast-json(阿里巴巴公司的開源框架,號(hào)稱全世界最快),Gson(Google公司開發(fā)的json解析框架)。xml的解析一般都是pull,sax,dom解析。
今天來分享一個(gè)pull解析的原理。這個(gè)是我要解析的xml數(shù)據(jù)的web頁面,

QQ截圖20160716142156.png

在android studio中寫入pull解析代碼

try {    
      XmlPullFactory factory=XmlPullParserFactory.newInstance();
      XmlPullParser parse=factory.newPullParser();  
      String text=" ";   
      parse.setInput(new StringReader(這個(gè)里面是你要解析的xml字符串));    
      int eventType=parse.getEventType();    
    //打印出開始解析的文件類型
      Log.i(TAG, eventType+"");
      //開始解析
      while(eventType!=parse.END_DOCUMENT){        
            String nodeName=parse.getName();     
            switch (eventType){          
                      case XmlPullParser.START_TAG:                
                              Log.i(TAG, nodeName);                  
                              if("appThree".equals(nodeName)){            
                                          parse.next();               
                                         text=parse.getText().trim();              
                                        Log.i(TAG, text+"");            
                                }             
                             break;  
                      case XmlPullParser.END_TAG:               
                             Log.i(TAG, nodeName);               
                             break;      
                      default:               
                             break;       
           }   
           eventType=parse.next();    
            //打印出每次解析eventType變化
          Log.i(TAG, eventType+"");
           }
} 
catch (XmlPullParserException e) {   
           e.printStackTrace();
}
catch (IOException e) {
    e.printStackTrace();
}

對(duì)里面做一個(gè)解釋,我們首先創(chuàng)建了一個(gè)XmlPullParserFactory(pull解析工廠),通過解析工廠獲得XmlPullParser(解析員),我們的解析員通過setInput(new StringReader(xml字符串))得到你想要解析的xml字符串。用一個(gè)循環(huán)進(jìn)行解析。
int eventType=parse.getEventType();獲取解析的類型。在pull解析當(dāng)中有五種解析類型,分別是
XmlPullParser.START_DOCUMENT=0(開始解析文檔),
XmlPullParser.EDN_DOCUMENT=1(結(jié)束解析文檔),
XmlPullParser.START_TAG=2(開始解析標(biāo)簽),
XmlPullParser.END_TAG=3(結(jié)束解析標(biāo)簽);
XmlPullParser.TEXT=4(解析文本時(shí)用的);
先來看看我解析出來的結(jié)果:


QQ截圖20160716141422.png

從上圖可以看到看到,
XmlPullParser.START_DOCUMENT,與XmlPullParser.END_DOCUMENT只執(zhí)行了一次。
在這個(gè)當(dāng)中我們發(fā)現(xiàn)2,3,4都在不停的執(zhí)行。所以我們可以總結(jié)pull解析的原理。拿下面這個(gè)來舉例說明原理。


QQ截圖20160716142156.png

pull解析這個(gè)xml字符串,首先從<?xml version="1.0" encoding="utf-8"?>開始解析,所以出現(xiàn)數(shù)字0.接下來進(jìn)入開始標(biāo)簽<apps>顯示數(shù)字2,此時(shí)會(huì)進(jìn)入TEXT。這一點(diǎn)我開始也不理解,為什么會(huì)出現(xiàn)4,我改動(dòng)了在<apps>后面加上一句話it is ok。原來<apps>后面是可以加上TEXT.這下就很清楚了。在瀏覽器上的效果圖如下圖:
QQ截圖20160716142532.png

以此這么下去,遇到開始標(biāo)簽顯示2,遇到結(jié)束標(biāo)簽顯示3,遇到文本,無論你有沒有寫文本,它都在哪里,顯示4.遇到結(jié)尾顯示1.
這個(gè)就是pull解析的全部過程。
pull是依靠數(shù)字來做判斷的xml解析方式,而且只能是從上往下。對(duì)于我們只想解析一個(gè)xml文檔某條數(shù)據(jù)來說,就顯得力不從心了。因?yàn)閜ull很傻,只能一步一步的解析。

可能大家對(duì)于怎么生成一個(gè)簡單的xml數(shù)據(jù)格式web頁面有所難度,我來講講怎么制作簡單的xml數(shù)據(jù)格式的web頁面。
需要的工具:Xmapp ,Sublime Text.
上官網(wǎng)下載Xmapp,windows平臺(tái)只有一種xmapp安裝包,所以無論你是32位的還是64位的都是用的是這個(gè)安裝包,按照提示安裝。安裝完畢之后,開啟Apache.如下圖:

QQ截圖20160716132733.png
QQ截圖20160716144148.png

安裝完畢之后,開啟Apache.如下圖:


QQ截圖20160716132916.png

進(jìn)入Xmapp的安裝目錄,找到一個(gè)hotdocs文件夾,進(jìn)入,


QQ截圖20160716133722.png

創(chuàng)建一個(gè)xml格式文本(創(chuàng)建一個(gè)文本文檔,更改后綴名),


![Uploading QQ截圖20160716133941_719312.png . . .]

假如是get_data.xml。


QQ截圖20160716144922.png

用sublime text打開xml文件進(jìn)行編輯。輸入xml語法格式的數(shù)據(jù)。保存,一定要記得保存。

QQ截圖20160716145005.png

此時(shí)在你的瀏覽器上輸入:localhost/get_data.xml。此時(shí)就會(huì)在瀏覽器上顯示你剛才編輯的數(shù)據(jù)。


QQ截圖20160716145041.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 XML解析No29 【 XML:可拓展標(biāo)記語言,語言和HTML類似,也是一種標(biāo)記語言。 特點(diǎn):標(biāo)記是自定義...
    征程_Journey閱讀 1,790評(píng)論 0 9
  • 目錄 1. 定義 XML,即 extensible Markup Language ,是一種數(shù)據(jù)標(biāo)記語言 & 傳輸...
    Carson帶你學(xué)安卓閱讀 17,752評(píng)論 8 135
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,378評(píng)論 4 61
  • 文/鴻運(yùn) 靜坐書前,翻閱時(shí)光,讀幾句心經(jīng),悠然。 煮一段歲月,品味流年,自濃到淡,坦然。 花開花落,雁北燕南,遵守...
    HONGYUNDANGTOU閱讀 423評(píng)論 16 16

友情鏈接更多精彩內(nèi)容