Android Pull解析

简介:

  解析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_demo</name> 
  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<Chapter> getAllChapters(InputStream inputStream) throws Exception{ 
  18.         List<Chapter> 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<Chapter>(); 
  28.                 break
  29.             case XmlPullParser.START_TAG://标签开始事件 
  30.                 if ("chapter".equals(parser.getName())) {//标签为<chapter> 
  31.                     chapter = new Chapter(); 
  32.                     chapter.setId(Integer.parseInt(parser.getAttributeValue(0))); 
  33.                 } 
  34.                 if (chapter != null) { 
  35.                     if ("name".equals(parser.getName())) {//标签为<name> 
  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())) {//结束标签</chapter> 
  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<Chapter> chapters = pullParse.getAllChapters(getResources().getAssets().open("catalogue.xml")); 

收工.



本文转自chainli 51CTO博客,原文链接:http://blog.51cto.com/lichen/1194036,如需转载请自行联系原作者

相关文章
|
4天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
4天前
|
Android开发
Android高级开发面试题以及笞案整理,实战解析
Android高级开发面试题以及笞案整理,实战解析
|
4天前
|
Android开发
71,字节跳动历年校招Android面试真题解析
71,字节跳动历年校招Android面试真题解析
|
5天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
4天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
|
5天前
HuggingFace Tranformers 源码解析(4)
HuggingFace Tranformers 源码解析
6 0
|
5天前
HuggingFace Tranformers 源码解析(3)
HuggingFace Tranformers 源码解析
7 0
|
5天前
|
开发工具 git
HuggingFace Tranformers 源码解析(2)
HuggingFace Tranformers 源码解析
8 0
|
5天前
|
并行计算
HuggingFace Tranformers 源码解析(1)
HuggingFace Tranformers 源码解析
11 0
|
6天前
PandasTA 源码解析(二十三)
PandasTA 源码解析(二十三)
43 0

推荐镜像

更多