解析xml的三种方式:DOM, SAX, PULL

好像Android学习过程中SAX被提到的概率高了一些. 固然SAX解析很好,并且名字很sexy. 可Pull解析有过之而无不及.

开工.

先认识一个文件catalogue.xml,放置于assets文件夹下

            
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <chapters> 
  3.         <chapter id="1"> 
  4.             <name>wait_notify_demoname> 
  5.             <summary>wait_notify例子summary> 
  6.         chapter> 
  7. chapters> 

可以理解为一本书的章节对象, 第一章名为wait_notify_demo

然后我们要解析之

            
  1. package com.lc.corecode.utility; 
  2.  
  3. import java.io.InputStream; 
  4. import java.util.LinkedList; 
  5. import java.util.List; 
  6. import org.xmlpull.v1.XmlPullParser; 
  7. import android.util.Xml; 
  8. import com.lc.corecode.pojo.Chapter; 
  9.  
  10. public class PullParse { 
  11.     /** 
  12.      * pull解析catalogue.xml 
  13.      * @param inputStream 目标文件 
  14.      * @return chapter对象的集合 
  15.      * @throws Exception 
  16.      */ 
  17.     public List getAllChapters(InputStream inputStream) throws Exception{ 
  18.         List chapters = null
  19.         Chapter chapter = null
  20.         XmlPullParser parser =Xml.newPullParser(); 
  21.         parser.setInput(inputStream, "UTF-8"); 
  22.          
  23.         int event = parser.getEventType();//产生第一个事件 
  24.         while (event != XmlPullParser.END_DOCUMENT) { 
  25.             switch (event) { 
  26.             case XmlPullParser.START_DOCUMENT://文档开始 
  27.                 chapters = new LinkedList(); 
  28.                 break
  29.             case XmlPullParser.START_TAG://标签开始事件 
  30.                 if ("chapter".equals(parser.getName())) {//标签为 
  31.                     chapter = new Chapter(); 
  32.                     chapter.setId(Integer.parseInt(parser.getAttributeValue(0))); 
  33.                 } 
  34.                 if (chapter != null) { 
  35.                     if ("name".equals(parser.getName())) {//标签为 
  36.                         chapter.setName(parser.nextText()); 
  37.                     } else if ("summary".equals(parser.getName())){ 
  38.                         chapter.setSummary(parser.nextText()); 
  39.                     } 
  40.                 } 
  41.                 break
  42.             case XmlPullParser.END_TAG://标签结束 
  43.                 if ("chapter".equals(parser.getName())) {//结束标签 
  44.                     chapters.add(chapter); 
  45.                     chapter = null
  46.                 } 
  47.                 break
  48.             default
  49.                 break
  50.             } 
  51.             event = parser.next();//进入下一个元素 
  52.         } 
  53.         return chapters; 
  54.     } 

最后是找个地方调用

            
  1. PullParse pullParse = new PullParse(); 
  2. List chapters = pullParse.getAllChapters(getResources().getAssets().open("catalogue.xml")); 

收工.

更多相关文章

  1. ADT在线安装
  2. 使用Android(安卓)Studio搭建Android集成开发环境(图文教程)
  3. android 7.1.1 软件升级安装报解析软件包时发生错误
  4. 【转载】Android事件分发机制完全解析,带你从源码的角度彻底理解(
  5. 类似HTML map标签功能的Android组件
  6. Android自定义Listener
  7. Android(安卓)Handle解析
  8. Android(安卓)开发环境准备(Ubuntu)
  9. Android(安卓)EventBus 源码解析

随机推荐

  1. 50个必须要会的微服务面试题[每日前端夜
  2. 前端网络知识点总结
  3. Apollo 源码解析 —— Config Service 操
  4. Apollo 源码解析 —— Admin Service 锁
  5. Spring 异步调用,一行代码实现!舒服,不接受
  6. 100多个纯CSS3动画图标
  7. CSS3创意曲线循环菜单导航
  8. Apollo 源码解析 —— Portal 配置灰度规
  9. Apollo 源码解析 —— Config Service 通
  10. Apollo 源码解析 —— Config Service 配