新聞中心
與***個(gè) SAX 示例類似,以上代碼完全沒(méi)有特定于 Android 的地方。DOM 解析器將所有 XML 文檔讀取到內(nèi)存中,然后允許您使用 DOM API 遍歷 XML 樹、檢索所需的數(shù)據(jù)。這是非常直觀的代碼,并且,在某些方面比基于 SAX 的實(shí)現(xiàn)更加簡(jiǎn)單。但是,DOM 通常更加占用內(nèi)存,因?yàn)橐磺袃?nèi)容都會(huì)先讀取到內(nèi)存中。這對(duì)于運(yùn)行 Android 的移動(dòng)設(shè)備來(lái)說(shuō)是一個(gè)問(wèn)題,但是當(dāng) XML 文檔始終保持很小的大小時(shí)是可行的。這可能意味著,Android 的開(kāi)發(fā)人員會(huì)認(rèn)為 SAX 解析在 Android 應(yīng)用程序上更加常見(jiàn),因此為它提供了額外的實(shí)用工具。Android 還提供了另一種類型的 XML 解析器,它就是 pull 解析器。

成都創(chuàng)新互聯(lián)公司是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),城西網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:城西等地區(qū)。城西做網(wǎng)站價(jià)格咨詢:028-86922220
XML pull 解析器
如前所述,Android 并未提供對(duì) Java StAX API 的支持。但是,Android 確實(shí)附帶了一個(gè) pull 解析器,其工作方式類似于 StAX。它允許您的應(yīng)用程序代碼從解析器中獲取事件,這與 SAX 解析器自動(dòng)將事件推入處理程序相反。清單 10 顯示了提要解析接口的一個(gè) pull 解析器實(shí)現(xiàn)。
清單 10. 基于 Pull 解析器的實(shí)現(xiàn)
java代碼:
- public class XmlPullFeedParser extends BaseFeedParser {
- public XmlPullFeedParser(String feedUrl) {
- super(feedUrl);
- }
- public List< Message > parse() {
- List< Message > messages = null;
- XmlPullParser parser = Xml.newPullParser();
- try {
- // auto-detect the encoding from the stream
- parser.setInput(this.getInputStream(), null);
- int eventType = parser.getEventType();
- Message currentMessage = null;
- boolean done = false;
- while (eventType != XmlPullParser.END_DOCUMENT && !done){
- String name = null;
- switch (eventType){
- case XmlPullParser.START_DOCUMENT:
- messages = new ArrayList< Message >();
- break;
- case XmlPullParser.START_TAG:
- name = parser.getName();
- if (name.equalsIgnoreCase(ITEM)){
- currentMessage = new Message();
- } else if (currentMessage != null){
- if (name.equalsIgnoreCase(LINK)){
- currentMessage.setLink(parser.nextText());
- } else if (name.equalsIgnoreCase(DESCRIPTION)){
- currentMessage.setDescription(parser.nextText());
- } else if (name.equalsIgnoreCase(PUB_DATE)){
- currentMessage.setDate(parser.nextText());
- } else if (name.equalsIgnoreCase(TITLE)){
- currentMessage.setTitle(parser.nextText());
- }
- }
- break;
當(dāng)前名稱:AndroidXML讀寫(七)
鏈接分享:http://m.fisionsoft.com.cn/article/dpoichh.html


咨詢
建站咨詢
