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...