Android PULL解析XML檔案(二)

2021-06-29 08:59:53 字數 1774 閱讀 3175

如果在乙個xml

文件中我們只需要前面一部分資料,但是使用

sax方式或dom方式會對整個文件進行解析,儘管

xml文件中後面的大部分資料我們其實都不需要解析,因此這樣實際上就浪費了處理資源。使用pull方式正合適。

pull解析器和sax解析器雖有區別但也有相似性。他們的區別為:sax解析器的工作方式是自動將事件推入註冊的事件處理器進行處理,因此你不能控制事件的處理主動結束;而pull解析器的工作方式為允許你的應用程式**主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件後不再獲取事件,結束解析。這是他們主要的區別。

而他們的相似性在執行方式上,pull解析器也提供了類似sax的事件,開始文件start_document和結束文件end_document,開始元素start_tag和結束元素end_tag,遇到元素內容text等,但需要呼叫next() 方法提取它們(主動提取事件)。(來自度娘 = = )

—————————————————————————————————————————————

用法相較於sax的區別在於對檔案的解析方式:(ps:學完sax,pull還是很好理解的)

sax需要乙個幫助類,其中重寫五個方法,重點在於character,endelement和startelement方法,根據xml的結構重寫就可以了

接下來說一下pull解析:

方法形式和sax差不多,start_document,end_document,start_tag,end_tag,.next(獲取標籤的屬性值)

case xmlpullparser.start_document:  

mlist = new arraylist(); // 初始化person集合

break;

// 判斷當前事件是否為標籤元素開始事件

case xmlpullparser.start_tag:

if (xpp.getname().equals("person")) else if (xpp.getname().equals("name")) else if (xpp.getname().equals("age"))

break;

// 判斷當前事件是否為標籤元素結束事件

case xmlpullparser.end_tag:

if (xpp.getname().equals("person"))

break;

} // 進入下乙個元素並觸發相應事件

eventtype = xpp.next();

看出和sax大致相同,主函式中使用方法如下:

需要建乙個所需類的鍊錶,然後解析xml檔案。

//通過assertmanager的open方法獲取到beauties.xml檔案的輸入流  

inputstream is = this.getassets().open("beauties.xml");

//初始化自定義的實現類beautyparserimpl

beautyparserimpl pbp = new beautyparserimpl();

//呼叫pbp的parse()方法,將輸入流傳進去解析,返回的鍊錶結果賦給beautylist

beautylist = pbp.parse(is);

http********** 類來實現。然後主函式裡對於網路的操作相同。

mainifest.xml檔案設定中新增訪問網路的許可權:

android PULL解析xml檔案

第一步 取得pull解析器 xmlpullparser parser xml.newpullparser 第二步 通過pull解析器取得xml檔案的事件型別 int eventtype parser.geteventtype 第三步 根據相應的事件型別進行xml解析 xmlpullparser.en...

android pull 解析xml方式

pull解析xml檔案,和sax和dom一樣 都可以脫離android單獨使用,pull和sax的原理一樣,不一樣的地方是pull讀取xml檔案後呼叫方法返回的是數字,讀取到xml的宣告返回數字0 start document 讀取到xml的結束返回數字1 end document 讀取到xml的開...

android pull 解析xml方式

先獲取到乙個xmlpullparse ctory例項 通過例項得到xmlpullparser物件 呼叫xmlpullparser的setinput 方法將服務返回的xml資料設定進去開始解析 通過geteventtype 可以得到當前的解析事件 while迴圈不斷地進行解析 如果當前的解析事件不等於...