日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

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

Pull創(chuàng)建XML

創(chuàng)建XML先實例化一個序列化對象,之后的通過Tag進行操作:

public void createXML() {

// 初始化一個序列化對象

XmlSerializer serializer = Xml.newSerializer();

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

try {

FileOutputStream foStream = new FileOutputStream(path);

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

//設置文檔

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

//設置根節(jié)點

serializer.startTag(null, "Books");

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

//設置子節(jié)點

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的結果:

 

 

 

 

 

 

 

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解析器對象

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標簽

book = new Book();

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

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

book.setTitle(parser.nextText());

}

break;

case XmlPullParser.END_TAG:

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

list.add(book);

}

break;

default:

break;

}

eventType = parser.next();//重新賦值,不然會死循環(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;

}

相對于Dom和SAX來說,Pull比較簡單易讀,不過簡單的總結一下常用的幾個方法:讀取到xml的聲明返回 START_DOCUMENT; 讀取到xml的結束返回 END_DOCUMENT ; 讀取到xml的開始標簽返回 START_TAG ,讀取到xml的結束標簽返回 END_TAG 讀取到xml的文本返回 TEXT .

Activity加載時候調(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--]

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

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

北京和東京2026年3月30日 /美通社/ -- 百奧賽圖(北京)醫(yī)藥科技股份有限公司(以下簡稱"百奧賽圖",SSE: 688796;HKEX: 02315),一家以創(chuàng)新技術驅動新藥研發(fā)的國際性生物技...

關鍵字: AN ADC 模型 IO

北京2026年3月27日 /美通社/ -- 百奧賽圖(北京)醫(yī)藥科技股份有限公司(以下簡稱"百奧賽圖",SSE: 688796;HKEX: 02315),一家以創(chuàng)新技術驅動新藥研發(fā)的國際性生物技術公司...

關鍵字: NEO ADC IO FDA

奧地利格拉茨2026年3月27日 /美通社/ -- 2026年3月18日,廣汽歐洲業(yè)務發(fā)展迎來重要里程碑——旗下埃安品牌車型AION UT在奧地利麥格納(Magna)工廠正式實現(xiàn)量產(chǎn)啟動(SOP)并成功下線,標志著廣汽在...

關鍵字: 廣汽 IO AI 電動化

曼谷2026年3月25日 /美通社/ -- 3月23日,第47屆曼谷國際車展正式開幕。廣汽國際以"服務升級"為核心,在車展現(xiàn)場重磅發(fā)布海外首個服務品牌GAC CARE,全面啟動"泰國行動2....

關鍵字: 廣汽 AC 新能源汽車 IO

菲律賓馬尼拉2026年3月26日 /美通社/ -- 2026年開年,廣汽在亞太區(qū)域延續(xù)強勁增長勢頭。自1月末起,廣汽國際菲律賓以"品牌煥新"為核心,在短短一個多月內(nèi)完成了從戰(zhàn)略發(fā)布、體驗升級到渠道動員...

關鍵字: 廣汽 AC TE IO

北京2026年3月23日 /美通社/ -- 百奧賽圖(北京)醫(yī)藥科技股份有限公司(以下簡稱"百奧賽圖",SSE: 688796;HKEX: 02315),一家以創(chuàng)新技術驅動新藥研發(fā)的國際性生物技術公司...

關鍵字: LIGHT IO 生物技術 NTC

約73%受試者可以達到每四個月一次給藥;近60%的受試者具備延長至五個月一次給藥的潛力 美國舊金山和中國蘇州2026年3月24日 /美通社/ -- 信達生物制藥集團(香港聯(lián)交所股票代碼:01801),一家致力...

關鍵字: AMD ST IO OV

廣州2026年3月17日 /美通社/ -- 近日,中國汽車流通協(xié)會發(fā)布的2月保值率研究報告顯示,廣汽傳祺三年保值率持續(xù)穩(wěn)居自主品牌榜首。車型保值率方面,傳祺GS8以77.0%的保值率登頂自主品牌中型SUV保值率排行榜;傳...

關鍵字: 廣汽 傳祺 IO AI

舊金山和中國蘇州2026年2月13日 /美通社/ -- 信達生物制藥集團(香港聯(lián)交所股票代碼:01801),一家致力于研發(fā)、生產(chǎn)和銷售腫瘤、自身免疫、代謝、眼科等重大疾病領域創(chuàng)新藥物的生物制藥公司宣布,其自主研發(fā)的HER...

關鍵字: ADC EAST OV IO

- HUMAIN通過戰(zhàn)略性收購ai.io的控股權,推出HUMAIN Sport,宣布將致力于推進AI驅動型體育技術的發(fā)展。 - 此次收購將加速AI與體育技術解決方案在沙特阿拉伯及全球市場的快速發(fā)展與落地。 - HUMAI...

關鍵字: AI SPORT IO 人工智能
關閉