www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 前面寫了兩篇XML解析的Dom和SAX方式,Dom比較符合思維方式,SAX事件驅(qū)動(dòng)注重效率,除了這兩種方式以外也可以使用Android內(nèi)置的Pull解析器解析XML文件。 Pull解析器的運(yùn)行

 前面寫了兩篇XML解析的Dom和SAX方式,Dom比較符合思維方式,SAX事件驅(qū)動(dòng)注重效率,除了這兩種方式以外也可以使用Android內(nèi)置的Pull解析器解析XML文件。 Pull解析器的運(yùn)行方式與 SAX 解析器相似,也是事件觸發(fā)的。Pull解析方式讓應(yīng)用程序完全控制文檔該怎么樣被解析,比如開始和結(jié)束元素事件,使用parser.next()可以進(jìn)入下一個(gè)元素并觸發(fā)相應(yīng)事件。通過Parser.getEventType()方法來(lái)取得事件的代碼值,解析是在開始時(shí)就完成了大部分處理。事件將作為數(shù)值代碼被發(fā)送,因此可以使用一個(gè)switch對(duì)感興趣的事件進(jìn)行處理,只過PULL方式讀xml回調(diào)方法返回的是數(shù)字。

Pull創(chuàng)建XML

創(chuàng)建XML先實(shí)例化一個(gè)序列化對(duì)象,之后的通過Tag進(jìn)行操作:

public void createXML() {

// 初始化一個(gè)序列化對(duì)象

XmlSerializer serializer = Xml.newSerializer();

File path = new File(getFilesDir(), "BookTest.xml");

try {

FileOutputStream foStream = new FileOutputStream(path);

serializer.setOutput(foStream, "utf-8");

//設(shè)置文檔

serializer.startDocument("utf-8", true);

//設(shè)置根節(jié)點(diǎn)

serializer.startTag(null, "Books");

for (int i = 1; i < 4; i++) {

//設(shè)置子節(jié)點(diǎn)

serializer.startTag(null, "Book");

serializer.attribute(null, "name", "書籍" + i);

serializer.startTag(null, "Title");

serializer.text("內(nèi)容" + i);

serializer.endTag(null, "Title");

serializer.endTag(null, "Book");

}

serializer.endTag(null, "Books");

serializer.endDocument();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

生成的XML的結(jié)果:

 

 

 

 

 

 

 

Pull讀取XML

展示內(nèi)容調(diào)用getListBooksByPull方法:

public List getListBooksByPull() {

list = new ArrayList();

File path = new File(getFilesDir(), "BookTest.xml");

try {

FileInputStream inputStream = new FileInputStream(path);

// 獲得pull解析器對(duì)象

XmlPullParser parser = Xml.newPullParser();

// 指定解析的文件和編碼格式

parser.setInput(inputStream, "utf-8");

int eventType = parser.getEventType(); // 獲得事件類型

Book book = null;

while (eventType != XmlPullParser.END_DOCUMENT) {

String tagNameString = parser.getName();

switch (eventType) {

case XmlPullParser.START_TAG:

if ("Book".equals(tagNameString)) {//Book標(biāo)簽

book = new Book();

book.setName(parser.getAttributeValue(null, "name"));

} else if ("Title".equals(tagNameString)) {//Title標(biāo)簽

book.setTitle(parser.nextText());

}

break;

case XmlPullParser.END_TAG:

if ("Book".equals(tagNameString)) {

list.add(book);

}

break;

default:

break;

}

eventType = parser.next();//重新賦值,不然會(huì)死循環(huán)

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

相對(duì)于Dom和SAX來(lái)說,Pull比較簡(jiǎn)單易讀,不過簡(jiǎn)單的總結(jié)一下常用的幾個(gè)方法:讀取到xml的聲明返回 START_DOCUMENT; 讀取到xml的結(jié)束返回 END_DOCUMENT ; 讀取到xml的開始標(biāo)簽返回 START_TAG ,讀取到xml的結(jié)束標(biāo)簽返回 END_TAG 讀取到xml的文本返回 TEXT .

Activity加載時(shí)候調(diào)用:

ListView listView = (ListView) findViewById(R.id.list_pull);

ArrayList

list = getListBooksByPull();

for (Book book : list) {

HashMap

map.put("itemTitle", book.getName());

map.put("itemText", book.getTitle());

arrayList.add(map);

}

SimpleAdapter simpleAdapter = new SimpleAdapter(this, arrayList,

R.layout.book, new String[] { "itemTitle", "itemText" },

new int[] { R.id.itemTitle, R.id.itemText });

listView.setAdapter(simpleAdapter);[!--empirenews.page--]

簡(jiǎn)單回顧一下三種解析方式,Dom解析xml是先把xml文檔都讀到內(nèi)存中,然后再用DOM API來(lái)訪問樹形結(jié)構(gòu),并獲取數(shù)據(jù)。這個(gè)寫起來(lái)很簡(jiǎn)單,但是很消耗內(nèi)存。要是數(shù)據(jù)過大,手機(jī)配置不行可能會(huì)死機(jī)。SAX解析是對(duì)文檔進(jìn)行順序掃描,當(dāng)掃描到文檔(document)開始與結(jié)束、元素(element)開始與結(jié)束、文檔(document)結(jié)束等地方時(shí)通知事件處理函數(shù),由事件處理函數(shù)做相應(yīng)動(dòng)作,然后繼續(xù)同樣的掃描,直至文檔結(jié)束。Pull解析器和SAX解析器很相似,但SAX解析器的工作方式是自動(dòng)將事件推入注冊(cè)的事件處理器進(jìn)行處理,因此你不能控制事件的處理主動(dòng)結(jié)束;而Pull解析器的工作方式為允許你的應(yīng)用程序代碼主動(dòng)從解析器中獲取事件,正因?yàn)槭侵鲃?dòng)獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結(jié)束解析。Pull的寫法確實(shí)很輕巧也很容易上手,個(gè)人比較喜歡Pull。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

慕尼黑2025年9月8日 /美通社/ -- 2025年9月8日德國(guó)國(guó)際汽車及智慧出行博覽會(huì)(IAA MOBILITY)于慕尼黑開幕,廣汽攜旗下五款新能源明星車型亮相,正式發(fā)布未來(lái)移動(dòng)出行的"廣汽方案"...

關(guān)鍵字: 廣汽 IO AI 移動(dòng)

北京2025年8月19日 /美通社/ -- 美通社(PR Newswire)母公司,全球消費(fèi)者與媒體情報(bào)領(lǐng)軍企業(yè)Cision今日正式宣布,旗下CisionOne平臺(tái)連續(xù)第二年榮獲市場(chǎng)情報(bào)權(quán)威機(jī)構(gòu)MarTech Break...

關(guān)鍵字: CIS THROUGH TE IO

加州圣地亞哥和北京2025年7月25日 /美通社/ -- CreateAI(OTC:TSPH)今日宣布,公司與枕刀歌動(dòng)畫團(tuán)隊(duì)聯(lián)合出品的《繡春刀》短片在Collision Awards中一舉斬獲三枚金獎(jiǎng)和一枚銀獎(jiǎng),與Wal...

關(guān)鍵字: CREATE AI SI IO

其他電腦(比如安卓手機(jī)/平板電腦)的屏幕壞了,你可能想在安排維修之前緊急訪問一些東西。你可以使用android的USB OTG功能(是的,幾乎每個(gè)android都支持這個(gè)功能,你可以將鼠標(biāo)和鍵盤連接到它)。

關(guān)鍵字: USB 鼠標(biāo) Android 樹莓派

上海 2025年7月4日 /美通社/ -- 本文闡述了汽車電子架構(gòu)從分布式向集中化演進(jìn)的趨勢(shì),黑芝麻智能分析了集中化帶來(lái)的安全隔離、實(shí)時(shí)性等關(guān)鍵挑戰(zhàn),并指出車用虛擬化技術(shù)是實(shí)現(xiàn)域控融合的核心解決方案。該技術(shù)能...

關(guān)鍵字: 虛擬化技術(shù) ECU 電子電氣 IO

深圳 2025年7月3日 /美通社/ -- 2025 年 7 月 2 日,晶泰科技(2228.HK)宣布完成對(duì)生成式 AI 蛋白設(shè)計(jì)賦能抗衰產(chǎn)品與藥物研發(fā)的技術(shù)平臺(tái) Fou...

關(guān)鍵字: FOUNDRY MIT 泰科 IO

新加坡 2025年6月11日 /美通社/ -- 在近日由新加坡資訊通信媒體發(fā)展局(IMDA)主辦的2025年新加坡亞洲科技大會(huì)(ATxSG)核心活動(dòng)—亞洲科技峰會(huì)(ATxS...

關(guān)鍵字: 新加坡 IO 生成式AI ST

蘇州 2025年5月27日 /美通社/ -- 5月24日-26日,第26屆全國(guó)醫(yī)院建設(shè)大會(huì)暨國(guó)際醫(yī)院建設(shè)、裝備及管理展覽會(huì)(CHCC 2025)在武漢舉行。藝卓(EIZO)攜手術(shù)室視覺顯示解決方案參展,以科技...

關(guān)鍵字: HC 醫(yī)學(xué)影像 IO 觸摸屏

創(chuàng)新引領(lǐng),暢銷全球100多個(gè)國(guó)家和地區(qū)! 南昌 2025年5月26日 /美通社/ -- 5月22日,2025年(第42屆)中國(guó)國(guó)際體育用品博覽會(huì)在江西南昌盛大開啟。作為國(guó)內(nèi)領(lǐng)先的科學(xué)運(yùn)動(dòng)服務(wù)商,舒華體育(SH...

關(guān)鍵字: 矩陣 AI BSP IO

Google 宣布與中國(guó) AR 科技公司 XREAL 達(dá)成深度戰(zhàn)略合作,聯(lián)合推出全球首款專為 Android XR 平臺(tái)打造的旗艦級(jí) AR 眼鏡 Project Aura。

關(guān)鍵字: Google XREAL Android XR眼鏡 AR
關(guān)閉