实例解析Android中使用Pull解析器解析XML的方法_Android

1.Pull简介
Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可以进入下一个元素并触发相应的事件,然后进行相应的处理,当元素开始解析时,调用perser.nextText()方法就可以获取到下一个Text类型元素的值。

2.pull特点
(1)简单的结构,一个接口,一个另外,一个工厂组成了Pull解析器
(2)简单易用,Pull解析器只有一个重要的方法next(),他被用来检索下一个事件,而他的事件也仅仅只有五个,START_DOCUMENT, START_TAG ,TEXT, END_TAG, END_DOCUMENT
(3)最小的内存消耗,Pull解析器和SAX解析器一样,对内存的暂用少,但是SAX解析稍微有点繁琐,DOM很耗内存,所以Pull被推荐使用

3.src结构
项目包名为 com.pullxml.mypull,在src根目录下存在person.xml文件

-- com.pullxml.util
-- -- Person.java
-- com.pullxml.mypull
-- -- MainAcitivity.java
-- com.pullxml.service
-- -- PullService.java
-- com.pullxml.test
-- -- PullTester.java
-- person.xml

4.示例 Pull解析XML
先在src目录先新建一个android.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
  <person id="23">
    <name>xiaanming</name>
    <age>23</age>
  </person>
  <person id="20">
    <name>liudehua</name>
    <age>28</age>
  </person>
</persons>

新建一个PullXMLService

package com.example.pull_parser; 

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; 

import org.xmlpull.v1.XmlPullParser; 

import android.util.Log;
import android.util.Xml; 

public class PullXMLService {
  public static List<Person> readXML() throws Exception{
    //获取src目录下面的android.xml文件的输入流
    InputStream is = PullXMLService.class.getClassLoader().getResourceAsStream("android.xml");
    //用来存放解析的Person对象
    List<Person> persons = null;
    //一个标记
    boolean flag = false;
    Person person = null; 

    //实例化一个XmlPullParser对象
    XmlPullParser parser = Xml.newPullParser(); 

    //设置输入流和编码
    parser.setInput(is, "UTF-8"); 

    //触发了第一个事件,根据XML的语法,也就是从他开始了解文档
    int eventCode = parser.getEventType(); 

    //如果获得的事件码如果是文档的结束,那么解析结束
    while (eventCode != XmlPullParser.END_DOCUMENT) {
      switch(eventCode){
      case XmlPullParser.START_DOCUMENT:{
        //开始解析的时候我们一般做一些初始化的操作
        persons = new ArrayList<Person>();
        break;
      }
      case XmlPullParser.START_TAG:{
        //判断当前的元素是否是需要检索的元素
        if("person".equals(parser.getName())){
          flag = true;
          person = new Person();
          person.setId(Integer.valueOf(parser.getAttributeValue(0)));
        }
        if(flag){
          if("name".equals(parser.getName())){
            person.setName(parser.nextText());
          }else if("age".equals(parser.getName())){
            person.setAge(Integer.valueOf(parser.nextText()));
          }
        }
        break;
      }
      case XmlPullParser.END_TAG:{
        if("person".equals(parser.getName()) && person != null){
          flag = false;
          persons.add(person);
          Log.e("log", person.toString());
          person = null;
        }
        break;
      }
      } 

      //这一步很重要,该方法返回一个事件码,也是触发下一个事件的方法
      eventCode = parser.next();
    } 

    return persons; 

  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索xml
, android
, 安卓
pull
android pull解析xml、android xmlpull解析、xmlpullparser解析xml、pull解析xml、java pull解析xml,以便于您获取更多的相关知识。

时间: 2024-12-03 18:58:47

实例解析Android中使用Pull解析器解析XML的方法_Android的相关文章

全面解析Android中对EditText输入实现监听的方法_Android

在 Android design support 包中提供了一种在输入不合适字符时一直显示的提示方式来显示,现在已经开始在更多的应用上被使用了:这些 Android app 在显示他们的错误提示时采用的不同的方式常常让人感觉非常的不和谐. 即这个一直显示的错误消息是在 TextInputLayout 中的 EditText 周围的.这也是,作为一个奖励,提供了材料设计风格中,活泼的浮动标签在一个 APP 的用户体验中常常是最无聊的部分. 这里来讨论如何在你的输入表单上去创建一个通用的.可重用的组

Android中使用TextView实现图文混排的方法_Android

向TextView或EditText中添加图像比直接添加文本复杂一点点,需要用到<img>标签. <img>只有一个src属性,该属性原则上应该指向一个图像地址或可以找到某个图像资源的唯一标识.但要注意的是,系统并不会直接根据src属性所指的值自动获取和显示图像,这一切都需要我们去做.说白了,src属性指的是什么只有开发者自己知道.开发者需要告诉系统src属性到底指的是什么,然后系统才会知道怎么做. 解析src属性值需要ImageGetter对象的getDrawable方法来完成.

Android中AlertDilog显示简单和复杂列表的方法_Android

本文实例讲述了Android中AlertDialog显示简单和复杂列表的方法.分享给大家供大家参考,具体如下: AlertDialog 显示简单列表 setItems import Android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import andro

Android中捕捉menu按键点击事件的方法_Android

本文实例讲述了Android中捕捉menu按键点击事件的方法.分享给大家供大家参考.具体如下: @Override public boolean onCreateOptionsMenu(Menu menu) { /* * add()方法的四个参数,依次是: 1.组别,如果不分组的话就写Menu.NONE, * 2.Id,这个很重要,Android根据这个Id来确定不同的菜单 3.顺序,那个菜单现在在前面由这个参数的大小决定 * 4.文本,菜单的显示文本 */ menu.add(Menu.NONE

Android编程实现小说阅读器滑动效果的方法_Android

本文实例讲述了Android编程实现小说阅读器滑动效果的方法.分享给大家供大家参考,具体如下: 看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等.由于某种原因,突然想写一个简单点的滑动翻页效果.在这里写出来也没有什么意图,希望大家可以根据这个效果举一反三,写出其他的效果.图就不上了. 下面是代码:大家理解onTouch事件即可 package com.example.testscroll.view; import android.content.Context; impor

Android中EditText 设置 imeOptions 无效问题的解决方法_Android

有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Android:imeOptions的值有actionGo. actionSend .actionSearch.actionDone等 但是今天我发现设置了无效  那是因为我设置了 android:maxLines="1" 解决方法 就是去掉 android:maxLines="1"

Android中invalidate()和postInvalidate() 的区别及使用方法_Android

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用.       Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时,调

详解Android中App的启动界面Splash的编写方法_Android

一.Splash界面的作用用来展现产品的Logo 应用程序初始化的操作 检查应用程序的版本 检查当前应用程序是否合法注册 二.界面的xml定义写一个布局背景设置为产品的logo图片,再添加一个textview显示版本号. <TextView android:id="@+id/tv_splash_version" android:layout_width="wrap_content" android:layout_height="wrap_conten

详解Android中Service服务的基础知识及编写方法_Android

首先,让我们确认下什么是service?         service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比较高,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦. 那么,什么时候,我们需要使用service呢?        我们知道,service是运行在后台的应用,对于用户来说失去了被关注的焦点.这就跟我们打开了音乐播