菜鳥學習之Android中pull解析xml原理

我們在開發(fā)Android app的時候汗菜,常常用到對數(shù)據進行解析秆吵,最常用的就是對xml,與json解析亏掀。json基本都是用到解析框架,fast-json(阿里巴巴公司的開源框架,號稱全世界最快),Gson(Google公司開發(fā)的json解析框架)捂贿。xml的解析一般都是pull,sax,dom解析。
今天來分享一個pull解析的原理巾乳。這個是我要解析的xml數(shù)據的web頁面您没,

QQ截圖20160716142156.png

在android studio中寫入pull解析代碼

try {    
      XmlPullFactory factory=XmlPullParserFactory.newInstance();
      XmlPullParser parse=factory.newPullParser();  
      String text=" ";   
      parse.setInput(new StringReader(這個里面是你要解析的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();
}

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


QQ截圖20160716141422.png

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


QQ截圖20160716142156.png

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

以此這么下去玛臂,遇到開始標簽顯示2烤蜕,遇到結束標簽顯示3封孙,遇到文本,無論你有沒有寫文本讽营,它都在哪里虎忌,顯示4.遇到結尾顯示1.
這個就是pull解析的全部過程。
pull是依靠數(shù)字來做判斷的xml解析方式斑匪,而且只能是從上往下呐籽。對于我們只想解析一個xml文檔某條數(shù)據來說,就顯得力不從心了蚀瘸。因為pull很傻狡蝶,只能一步一步的解析。

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

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

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


QQ截圖20160716132916.png

進入Xmapp的安裝目錄,找到一個hotdocs文件夾寓搬,進入珍昨,


QQ截圖20160716133722.png

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


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

假如是get_data.xml句喷。


QQ截圖20160716144922.png

用sublime text打開xml文件進行編輯镣典。輸入xml語法格式的數(shù)據。保存唾琼,一定要記得保存兄春。

QQ截圖20160716145005.png

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


QQ截圖20160716145041.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赶舆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祭饭,更是在濱河造成了極大的恐慌芜茵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甜癞,死亡現(xiàn)場離奇詭異夕晓,居然都是意外死亡,警方通過查閱死者的電腦和手機悠咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門蒸辆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來征炼,“玉大人,你說我怎么就攤上這事躬贡∽话拢” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵拂玻,是天一觀的道長酸些。 經常有香客問我,道長檐蚜,這世上最難降的妖魔是什么魄懂? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮闯第,結果婚禮上市栗,老公的妹妹穿的比我還像新娘。我一直安慰自己咳短,他們只是感情好填帽,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咙好,像睡著了一般篡腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勾效,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天嘹悼,我揣著相機與錄音,去河邊找鬼葵第。 笑死绘迁,一個胖子當著我的面吹牛合溺,可吹牛的內容都是我干的卒密。 我是一名探鬼主播奏纪,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼企巢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了串述?” 一聲冷哼從身側響起睛约,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鼎俘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辩涝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸伐,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年怔揩,在試婚紗的時候發(fā)現(xiàn)自己被綠了捉邢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脯丝。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伏伐,靈堂內的尸體忽然破棺而出宠进,到底是詐尸還是另有隱情,我是刑警寧澤藐翎,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布材蹬,位于F島的核電站,受9級特大地震影響吝镣,放射性物質發(fā)生泄漏堤器。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一末贾、第九天 我趴在偏房一處隱蔽的房頂上張望吼旧。 院中可真熱鬧,春花似錦未舟、人聲如沸圈暗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽员串。三九已至,卻和暖如春昼扛,著一層夾襖步出監(jiān)牢的瞬間寸齐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工抄谐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渺鹦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓蛹含,卻偏偏與公主長得像毅厚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浦箱,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容