`
davice_li
  • 浏览: 93768 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Android实例] 让人人都懂XML解析,Pull方式解析Xml的详尽注释

阅读更多



解析Xml有三种方式可选,sax ,dom ,pull  ,,各有各的优点,但在android上是不推荐使用DOM来解析的

一般都用SAX和PULL 这两个性能相近, SAX的解析方式大家可以去看MARS的教程 讲的也比较好喔

PULL的话我个人觉得处理事件比较简单,所以就给不懂的同学详细讲讲,嘿嘿....希望大家都能明白

感谢 传智的张老师,黎老师, 感谢勇军哥
首先给大家看看我的笔记

那么我们就开始吧
很简单,这是我们要解析的xml文件,直接放在src之下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <students>
  3. <student id = "1">
  4. <name>伍业雄</name>
  5. <age>22</age>
  6. </student>
  7. <student id = "2">
  8. <name>陈俊安</name>
  9. <age>21</age>
  10. </student>
  11. <student id = "3">
  12. <name>王世铭</name>
  13. <age>22</age>
  14. </student>

  15. </students>
复制代码



写个bean  嘿嘿.<我都没学java web  原来这东西叫Bean>


  1. package tree.love.bean;
  2. import java.io.Serializable;
  3. public class Person implements Serializable{
  4. private int id ;
  5. private String name ;
  6. private int age ;
  7. public int getId() {
  8.   return id;
  9. }
  10. public void setId(int id) {
  11.   this.id = id;
  12. }
  13. public String getName() {
  14.   return name;
  15. }
  16. public void setName(String name) {
  17.   this.name = name;
  18. }
  19. public int getAge() {
  20.   return age;
  21. }
  22. public void setAge(int age) {
  23.   this.age = age;
  24. }
  25. public Person(){}
  26. public Person(String name ,int age )
  27. {
  28.   this.name = name ;
  29.   this.age = age ;
  30. }
  31. @Override
  32. public String toString() {
  33.   
  34.   return this.name +",,"+this.age;
  35. }

  36. }
复制代码



然后这就是解析xml的代码了.返回一个List<T>


  1. package tree.love.xmlUitl;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import org.xmlpull.v1.XmlPullParser;
  7. import org.xmlpull.v1.XmlPullParserException;
  8. import tree.love.bean.Person;
  9. import android.util.Log;
  10. import android.util.Xml;
  11. public class MyPullxml {

  12. private static final String XMLPULL_INFO = "XmlPull_Info";
  13. public static List<Person> getDate(InputStream inStream)
  14. {
  15.   List<Person> persons = null ;
  16.   Person currentPerson = null ;
  17.   
  18.   /**
  19.    * android给我们提供了一个工具类'Xml'
  20.    * 通过这个工具类可以很方便地去new一个Pull的解析器,返回类型是XmlPullParser
  21.    *
  22.    **/
  23.   XmlPullParser xmlPull = Xml.newPullParser();
  24.   
  25.   try {
  26.    /**
  27.     * 提供的xml内容方式都是以输入流的方式InputStream
  28.     **/
  29.    xmlPull.setInput(inStream,"UTF-8");
  30.    /**
  31.     * 触发事件getEventType() =>返回事件码
  32.     * 当它遇到某个字符,如果符合xml的语法规范.
  33.     * 它就会出发这个语法所代表的数字
  34.     * Returns the type of the current event (START_TAG, END_TAG, TEXT, etc.)
  35.     **/
  36.    int eventCode = xmlPull.getEventType();
  37.    
  38.    /**
  39.     * 解析事件:
  40.     * StartDocument,文档开始
  41.     * Enddocument,文档结束
  42.     *
  43.     *  每次读到一个字符,就产生一个事件
  44.     *  只要解析xml文档事件不为空,就一直往下读
  45.     **/
  46.    while (eventCode != XmlPullParser.END_DOCUMENT)
  47.    {
  48.     switch (eventCode)
  49.     {
  50.    
  51.     case XmlPullParser.START_DOCUMENT: //文档开始事件,可以做一些数据初始化处理
  52.      persons = new ArrayList<Person>();
  53.      break;
  54.      
  55.     case XmlPullParser.START_TAG://元素开始.
  56.      String name = xmlPull.getName();
  57.      if(name.equalsIgnoreCase("student"))
  58.      {
  59.       currentPerson = new Person();
  60.       currentPerson.setId(new Integer(xmlPull.getAttributeValue(null, "id")));
  61.      }
  62.      else if(currentPerson != null)
  63.      {
  64.       if(name.equalsIgnoreCase("name"))
  65.       {
  66.        currentPerson.setName(xmlPull.nextText());
  67.       }
  68.       else if(name.equalsIgnoreCase("age"))
  69.       {
  70.        currentPerson.setAge(new Short(xmlPull.nextText()));
  71.       }
  72.      }
  73.      break;
  74.     case XmlPullParser.END_TAG: //元素结束,

  75.      if(currentPerson != null && xmlPull.getName().equalsIgnoreCase("student"))
  76.      {
  77.       persons.add(currentPerson);
  78.       currentPerson = null ;
  79.      }
  80.      break;
  81.     }
  82.     eventCode = xmlPull.next();//进入到一下一个元素.
  83.    }
  84.   } catch (XmlPullParserException e) {
  85.    
  86.    Log.i(XMLPULL_INFO, e.toString());
  87.   } catch (IOException e) {
  88.    
  89.    Log.i(XMLPULL_INFO, e.toString());
  90.   }
  91.   return persons;
  92. }
  93. }
复制代码



最后xml的数据这东西 写好之后最好能用Android Junit 一下.再与之数据交互 ,放进listView 或者Gridview

  1. package tree.love.action;

  2. import java.io.InputStream;
  3. import java.util.List;

  4. import tree.love.bean.Person;
  5. import tree.love.xmlUitl.MyPullxml;
  6. import android.test.AndroidTestCase;
  7. import android.util.Log;

  8. public class xmlText extends AndroidTestCase {
  9. public void PullXmlText() throws Exception
  10. {
  11. InputStream instream = this.getClass().getClassLoader().getResourceAsStream("student.xml");

  12. List<Person> persons = MyPullxml.getDate(instream);

  13. for(Person person : persons)
  14. {
  15. Log.i("XML", person.toString());
  16. }
  17. }
  18. }
复制代码
分享到:
评论

相关推荐

    使用Android自带的XML解析器PULL解析器简单的解析xml

    Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...

    Android 封装pull解析xml

    Pull解析器(XMLPullParser)是Android SDK提供的一种轻量级、高效的XML解析方式,它不需要创建整个XML文档的树结构,而是通过事件触发的方式解析XML,从而节省内存资源。以下是一些关于封装Pull解析XML的关键知识点...

    在android中使用pull解析xml文件

    总结,Android中的XML Pull解析器提供了高效且内存友好的方式来解析XML文件。通过创建解析器、设置输入源、处理事件,开发者可以轻松地从XML文件中提取所需的数据。在实际应用中,结合具体业务逻辑,合理运用XML ...

    android实例xml解析

    PullParser是Android提供的一种更高效的XML解析方式,它是基于事件的解析模型,但比SAX更简单易用。PullParser通过拉动(pulling)数据来解析XML,提供向前看的能力,可以在解析过程中跳过不关心的数据。 4. 示例...

    android pull解析xml源码

    7. **应用场景**:Android系统配置、网络API响应、XML配置文件等都可能涉及XML Pull解析。 总之,Android的XML Pull解析器是一个轻量级且高效的工具,适用于处理XML数据。通过理解其基本原理和操作方法,开发者可以...

    Android XML解析—— Pull解析XML(待完善)

    在实际开发中,如Android的布局文件解析、配置文件读取或者从网络获取XML数据时,都可以使用Pull解析器进行处理。由于其高效和轻量级的特性,尤其在资源有限的环境中,Pull解析是首选的XML处理方式。 在博客链接...

    [Android实例] Android之解析XML文件

    ### Android实例:解析XML文件 #### 一、引言 在Android开发中,解析XML文件是一项常见的需求。本文将详细介绍如何使用SAX(Simple API for XML)解析器来解析XML文件,并通过一个具体的实例来进行说明。 #### 二...

    Android 生成和PULL解析xml

    本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...

    Pull解析xml源码导入即可用

    在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动通过XML文档的结构,而无需预先加载整个文档到内存。这使得解析大型XML文件成为可能,同时减少了对系统资源的需求。Android提供了名为`org....

    Android SAX、DOM、Pull解析xml文件案例讲解

    本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器,并通过案例来帮助理解它们的工作原理和应用场景。 ### 1. SAX解析器 SAX(Simple API for...

    安卓Android源码——比较通用的xml解析方法.rar

    在Android资源文件中,可以使用`XmlResourceParser`解析XML,它是基于Pull解析器的,专为处理Android资源设计。例如,解析布局文件、首选项设置等,可以通过`Resources.getXml(int resid)`获取`XmlResourceParser`...

    Android解析xml(3)---Pull解析

    在Android中,XML解析主要有三种方式:DOM解析、SAX解析和Pull解析。DOM解析会将整个XML文件加载到内存,形成一个树形结构,适合小规模的XML文件;SAX解析是基于事件的,逐行读取,不会占用太多内存,但编程相对复杂...

    使用Pull解析器读取XML文件和生成XML文件

    Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用率。 首先,我们来了解XML的基本结构。XML文件由一系列元素构成,每个元素由...

    Android PULL解析XML

    要实现PULL解析XML,首先需要创建一个`XmlPullParserFactory`工厂对象,然后用它创建`XmlPullParser`解析器实例。接着,我们需要设置输入源,通常是XML文件的输入流。例如: ```java XmlPullParserFactory factory ...

    XML解析AndroidPull解析代码

    在Android平台上,XML解析是处理XML文档的关键技术,通常有两种主要的解析方式:DOM(Document Object Model)解析和Pull解析。 DOM解析将整个XML文档加载到内存中,形成一个树形结构,可以方便地访问和修改任何...

    google天气预报XML-Pull解析版(完全解析)

    在Android开发中,XML-Pull解析常用于网络数据的解析,因为它高效且内存友好。 首先,我们需要了解如何使用XML-Pull解析API。在Java中,我们可以使用`org.xmlpull.v1.XmlPullParserFactory`来创建一个解析器实例,...

    Android利用pull生成xml文件

    "Android利用Pull生成XML文件"这一主题涉及到的是如何使用Android的Pull解析器来读取和生成XML内容。Pull解析器是一种轻量级、低级别的解析机制,与DOM(文档对象模型)和SAX(简单API for XML)解析器相比,它更...

    Android XML解析 SAX DOM Pull

    在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...

    android 解析XML文件 生成XML文件

    本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...

    xml航班解析实例

    本实例——“xml航班解析实例”,提供了一个全项目的压缩包,包含了源代码和注释,方便个人学习和理解XML解析在安卓应用中的具体应用。 在安卓应用中,XML解析主要分为两种方式:DOM(Document Object Model)解析...

Global site tag (gtag.js) - Google Analytics