關於Android的XML檔案解析器Pull解析方式事件類型的分析

來源:互聯網
上載者:User

   在解析XML檔案的過程中,發現API文檔中對於解析事件描述的不夠詳盡,給解析XML檔案帶來了不少的困擾,今天做了個事件類型分析的demo和大家分享一下。

第一步:建立一個Android工程檔案,其他都不用改,只要在onCreate()方法中寫一個xmlTest()方法即可,代碼如下:


[java]
package com.example.xmltest; 
 
import java.io.IOException; 
 
import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserException; 
 
import android.app.Activity; 
import android.content.res.XmlResourceParser; 
import android.os.Bundle; 
 
public class MainActivity extends Activity { 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        xmlTest(); 
    } 
 
    /**
     * 測試Pull解析方式中的事件類型
     */ 
    private void xmlTest() { 
        //定義事件類型  
        int eventType = 0; 
        try { 
            XmlResourceParser xrp = getResources().getXml(R.xml.timezones); 
            // 擷取到xml檔案時,XmlResourceParser的是指向文檔開始處  
            eventType = xrp.getEventType(); 
            // System.out.println("-------->"+eventType);//查看事件的數值  
            while (eventType != XmlPullParser.END_DOCUMENT) { 
                switch (eventType) { 
                case XmlPullParser.START_DOCUMENT: 
                    System.out.println("Start document"); 
                    break; 
                case XmlPullParser.START_TAG: 
                    System.out.println("Start tag " + xrp.getName()); 
                    break; 
                case XmlPullParser.TEXT: 
                    System.out.println("Text " + xrp.getText()); 
                    break; 
                case XmlPullParser.END_TAG: 
                    System.out.println("End tag " + xrp.getName()); 
                    break; 
                default: 
                    break; 
                } 
                eventType = xrp.next(); 
                //System.out.println("-------->"+eventType);//查看事件的數值  
            } 
        } catch (XmlPullParserException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        //判斷事件類型是不是文檔結束  
        if (eventType == XmlPullParser.END_DOCUMENT) { 
            System.out.println("End document"); 
        } 
    } 

package com.example.xmltest;

import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  xmlTest();
 }

 /**
  * 測試Pull解析方式中的事件類型
  */
 private void xmlTest() {
  //定義事件類型
  int eventType = 0;
  try {
   XmlResourceParser xrp = getResources().getXml(R.xml.timezones);
   // 擷取到xml檔案時,XmlResourceParser的是指向文檔開始處
   eventType = xrp.getEventType();
   // System.out.println("-------->"+eventType);//查看事件的數值
   while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {
    case XmlPullParser.START_DOCUMENT:
     System.out.println("Start document");
     break;
    case XmlPullParser.START_TAG:
     System.out.println("Start tag " + xrp.getName());
     break;
    case XmlPullParser.TEXT:
     System.out.println("Text " + xrp.getText());
     break;
    case XmlPullParser.END_TAG:
     System.out.println("End tag " + xrp.getName());
     break;
    default:
     break;
    }
    eventType = xrp.next();
    //System.out.println("-------->"+eventType);//查看事件的數值
   }
  } catch (XmlPullParserException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  //判斷事件類型是不是文檔結束
  if (eventType == XmlPullParser.END_DOCUMENT) {
   System.out.println("End document");
  }
 }
}
第二步:上面的代碼中用到了一個timezones.xml檔案,代碼如下,只需將下面代碼複製到Android工程檔案-->res-->xml檔案夾下即可:[html] view plaincopyprint?<?xml version="1.0" encoding="utf-8"?> 
<timezones> 
    <timezone id="Pacific/Majuro">馬朱羅</timezone> 
    <timezone id="Pacific/Midway">中途島</timezone> 
</timezones> 

<?xml version="1.0" encoding="utf-8"?>
<timezones>
    <timezone id="Pacific/Majuro">馬朱羅</timezone>
    <timezone id="Pacific/Midway">中途島</timezone>
</timezones>第三部 :在模擬器上運行程式,在LogCat上可以看到如下資訊:


我們對列印結果做分析如下:

1.可以看到Start document列印了兩次,說明當程式執行個體化XmlResourceParser這個對象後,Pull解析器預設的事件是XmlPullParser.START_DOCUMENT,當執行一次XmlResourceParser.next()後,事件仍然指向XmlPullParser.START_DOCUMENT。

2.之後再執行XmlResourceParser.next()則依次向下取一個事件。

3.常用的事件有:XmlPullParser.START_DOCUMENT、XmlPullParser.START_TAG、XmlPullParser.TEXTXmlPullParser.END_TAG、XmlPullParser.END_DOCUMENT。

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.