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解析方式
privatelistfetchriverfromxmlbydom(stringfilename)catch(parserconfigurationexceptione)catch(saxexceptione)catch(ioexceptione)
log.d(t,"execfetchriverformxmlbysaxusetime="
+(system.currenttimemillis()-starttime));
returnrivers;
}privateclassmysaxhandlerextendsdefaulthandler
@override
publicvoidstartdocument()throwssaxexception
@override
publicvoidenddocument()throwssaxexception
@override
publicvoidstartelement(stringuri,stringlocalname,stringqname,
attributesattributes)throwssaxexception
if(isriver)elseif(tagname.equals(imageurlstr))}}
@override
publicvoidendelement(stringuri,stringlocalname,stringqname)
throwssaxexception
if(isriver)elseif(tagname.equals(imageurlstr))}}
@override
publicvoidcharacters(charch,intstart,intlength)
throwssaxexceptionelseif(isimageurl)
}publiclistgetrivers()
}
pull解析方式:
privatelistfetchriverformxmlbypull(stringfilename)elseif(river!=null)elseif(tag.equalsignorecase(imageurlstr))
}break;
//結束節點
ca***mlpullparser.end_tag:
"end_tag:"+xmlpullparser.getname());
if(xmlpullparser.getname().equalsignorecase(riverstr)&&river!=null)
break;
default:
break;
}eventtype=xmlpullparser.next();
}}catch(xmlpullparserexceptione)catch(ioexceptione)
log.d(t,"execfetchriverformxmlbypullusetime="
+(system.currenttimemillis()-starttime));
returnrivers;
}
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...