Android平台下sax,dom,pull解析

2021-06-22 04:34:05 字數 2753 閱讀 9401

1.android中三種xml的解析方式,分別為dom,sax,pull,其中pull的解析方式最優

2.dom,sax,pull解析方式的區別

(1).dom解析方式:

首先一下子載入整個文件然後再挨個節點解析,費流量

優點:對於處理大文件,以及能力強的cpu效能比較快

缺點:對於處理能力不夠強的cpu一下子可能受不了,就像乙個人一口先吃下乙個大西瓜,再來嚼.

(2).sax解析方式:

sax是事件驅動型解析方式

雖說是事件驅動型的和pull差不多,但沒有像pull那樣提供next介面,想向下繼續解析就向下,沒有靈活性,死板,包括得到資料也是用模板弄好,對於特殊的資料組裝還要用變數控制。

sax是選擇性的解析,他是解析符合條件的內容。

手動停止:

解析完需要的東西後就拋異常吧,比如throw new saxexception("已拿到資料,中斷解析!!!");

(3).pull的解析方式:

pull驅動型解析方式,載入時不把所有的節點都載入到解析機裡,只是去乙個乙個節點去查詢,如果是乙個節點而且需要這個節點就取出來,不像dom,不管你要不要都放在解析機裡,要拿就拿,不拿就算了.,減少流量的使用

3.綜上覺得pull解析方式最優,通過除錯**發現,解析同乙個xml檔案,pull解析方式花的時間最少.

核心**如下:

//dom解析方式

private listfetchriverfromxmlbydom(string filename) 

} catch (parserconfigurationexception e)  catch (ioexception e)  catch (saxexception e) 

log.d(t, "exec fetchriverfromxmlbydom use time = "

+ (system.currenttimemillis() - starttime));

return rivers;

}

sax解析方式:

private listfetchriverformxmlbysax(string filename)  catch (parserconfigurationexception e)  catch (saxexception e)  catch (ioexception e) 

log.d(t, "exec fetchriverformxmlbysax use time = "

+ (system.currenttimemillis() - starttime));

return rivers;

}private class mysaxhandler extends defaulthandler 

@override

public void startdocument() throws saxexception 

@override

public void enddocument() throws saxexception 

@override

public void startelement(string uri, string localname, string qname,

attributes attributes) throws saxexception 

if (isriver)  else if (tagname.equals(imageurlstr)) }}

@override

public void endelement(string uri, string localname, string qname)

throws saxexception 

if (isriver)  else if (tagname.equals(imageurlstr)) }}

@override

public void characters(char ch, int start, int length)

throws saxexception  else if (isimageurl) 

}public listgetrivers() 

}

pull解析方式:

private listfetchriverformxmlbypull(string filename)  else if (river != null)  else if (tag.equalsignorecase(imageurlstr)) 

}break;

//結束節點

case xmlpullparser.end_tag:

"end_tag:" + xmlpullparser.getname());

if (xmlpullparser.getname().equalsignorecase(riverstr) && river != null) 

break;

default:

break;

}eventtype = xmlpullparser.next();

}} catch (xmlpullparserexception e)  catch (ioexception e) 

log.d(t, "exec fetchriverformxmlbypull use time = "

+ (system.currenttimemillis() - starttime));

return rivers;

}

Android平台下sax,dom,pull解析

1.android中三種xml的解析方式,分別為dom,sax,pull,其中pull的解析方式最優 2.dom,sax,pull解析方式的區別 1 dom解析方式 首先一下子載入整個文件然後再挨個節點解析,費流量 優點 對於處理大文件,以及能力強的cpu效能比較快 缺點 對於處理能力不夠強的cpu...

Android平台下載入PDF檔案方案解析

第一種方案 public void openpdfreader int index catch activitynotfoundexception e 第二種方案 先讚下ios平台,載入pdf有各種方案,系統自帶api,uiwebview無縫載入顯示,可惜android平台採用簡單的webview載...

Android平台下ndk編譯應用程式

新建jni目錄 設定好android ndk編譯環境 將原始碼檔案放在當前目錄下 以main.cpp檔案為例 jni目錄下的結構如下 android.mk內容如下 local path call my dir include clear vars local src files main.cpp l...