Android學習筆記43:XML檔案解析(Pull方式)

來源:互聯網
上載者:User

  解析XML文檔的方法是很多的,除了常用的SAX和DOM方法以外,還可以使用Java內建的Pull來解析XML文檔。

 

1.使用Pull解析器解析XML文檔

  Pull解析器的運行方式和SAX解析器很相似,它提供了類似的事件,比如文檔開始、文檔結束、開始元素和結束元素等。使用parser.next()方法可以進入下一個元素並觸發相應的事件。各種事件均已數位形式被發送,因此可以在程式中使用一個switch語句來對事件進行選擇,然後進行相應的事件處理。

1.1事件類型

  Pull解析器提供的事件類型總共有5種,分別如下:

  (1)START_DOCUMENT         文檔開始

  (2)START_TAG         開始元素

  (3)TEXT           文本

  (4)END_TAG        結束元素

  (5)END_DOCUMENT     文檔結束

1.2常用方法

  使用Pull解析器XmlPullParser解析XML文檔時,主要會用到以下幾個常用方法。

  (1)int getAttributeCount();         //擷取當前元素的屬性個數

  (2)String getAttributeValue(int index);   //擷取屬性值

  (3)int getEventType();           //擷取事件類型

  (4)String getName();             //用於START_TAG和END_TAG事件中,擷取當前元素的名字

  (5)int next();                 //處理下一個元素

  (6)int nextText();              //用於START_TAG事件中,獲得下一個TEXT類型的元素

1.3建立Pull解析器

  可以通過以下兩個步驟建立一個Pull解析器。

  (1)通過調用XmlPullParserFactory工廠類的newInstance()方法,建立一個Pull解析器工廠對象。

  (2)通過調用Pull解析器工廠對象的newPullParser()方法,建立一個Pull解析器對象。

  建立好了Pull解析器對象之後,就可以通過調用Pull解析器對象的setInput()方法傳入想要解析的XML文檔了。其中,setInput()方法提供了兩種重載的形式,分別為:

  (1)void setInput(Reader in);

  (2)void setInput(InputStream inputStream, String inputEncoding);

1.4執行個體

  如下的代碼使用Pull解析器對上兩篇博文中提到的“person.xml”文檔進行瞭解析,提取出了XML文檔中的person資訊,並儲存到了Person對象列表。

 1     /* 2      * Function :   使用Pull解析器解析XML文檔 3      * Param   :  inputStream      以輸入資料流的形式傳入XML文檔 4      *               inputEncoding     XML文檔的編碼格式 5      * Retuen  :    List<Person>     Person對象列表 6      * Author  :    部落格園-依舊淡然 7      */ 8     public static List<Person> readXML(InputStream inputStream, String inputEncoding) throws Exception { 9         10         List<Person> list = null;            //儲存解析得到的所有Person對象11         Person person = null;               //儲存解析得到的單個Person對象12         13         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();            //建立Pull解析器工廠14         XmlPullParser xmlPullParser = factory.newPullParser();         //建立Pull解析器15         xmlPullParser.setInput(inputStream, inputEncoding);            //以輸入資料流的形式傳入所要解析的XML文檔16         17         int eventType = xmlPullParser.getEventType();         //擷取事件類型18         while(eventType != XmlPullParser.END_DOCUMENT) {    19             switch(eventType) {20             case XmlPullParser.START_DOCUMENT:                //文檔開始21                 list = new ArrayList<Person>();22                 break;23             case XmlPullParser.START_TAG:                     //開始元素24                 if(xmlPullParser.getName().equals("person")) {25                     person = new Person();26                     int id = Integer.parseInt(xmlPullParser.getAttributeValue(0));    //擷取元素的屬性值27                     person.setId(id);28                 } else if(xmlPullParser.getName().equals("name")) {29                     String name = xmlPullParser.nextText();    //擷取元素的內容30                     person.setName(name);31                 } else if(xmlPullParser.getName().equals("age")) {32                     int age = Integer.parseInt(xmlPullParser.nextText());33                     person.setAge(age);34                 }35                 break;36             case XmlPullParser.END_TAG:                        //結束元素37                 if(xmlPullParser.getName().equals("person")) {38                     list.add(person);39                     person = null;40                 }41                 break;42             }43             eventType = xmlPullParser.next();            //產生迴圈,遍曆所有元素44         }45         return list;46     }

  需要注意的一點是,使用Pull解析器時,需要在工程中匯入kxml2-2.2.2.jar包。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.