Android演示使用PULL方式解析XML文件

来源:互联网 发布:水滴wifi破解软件 编辑:程序博客网 时间:2024/05/02 01:55

之前已经分别介绍过使用SAX方式及DOM方式解析XML文件,本次介绍如何使用PULL方式解析。

三种方式解析XML文件的特性如下:

  1. SAX和PULL方式都属于无缓存的方式解析,在xml文件较大时使用较为合适,并且由于PULL方式代码编写较为简单,而且可以控制随时停止解析,所以我个人更多倾向于使用PULL方式;
  2. 由于SAX和PULL方式没有缓存内容,在xml文件较为复杂、xml文件较小等情况下,可以使用DOM方式,毕竟使用起来检索较为方便;


本次示例xml文件如下:

<?xml version="1.0" encoding="utf-8"?><ProjectSettings><CurrentProject>0</CurrentProject><Project><Name>FreeDemo</Name><RunningMode>1</RunningMode></Project></ProjectSettings>

本次示例java代码如下:

package com.freesoft.utility.logger;import java.io.IOException;import java.io.InputStream;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import android.util.Xml;import com.freesoft.utility.IntWrapper;import com.freesoft.utility.settings.ProjectSetting;public class PULLConfigGetter {    public static ProjectSetting getConfig(InputStream is) {final int INVALID_PROJECT = -1;ProjectSetting currentSetting = new ProjectSetting();int currentProject = INVALID_PROJECT;int projectCount = 0;XmlPullParser parser = Xml.newPullParser();try {    parser.setInput(is, "UTF-8");    int event = parser.getEventType();    while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_DOCUMENT:    break;case XmlPullParser.START_TAG:    if (parser.getName().equals(    ProjectSetting.CURRENTPROJECT_NAME)) {currentProject = IntWrapper.wrap(parser.nextText(),INVALID_PROJECT);    } else if (parser.getName()    .equals(ProjectSetting.NAME_NAME)) {if (projectCount == currentProject) {    currentSetting.setName(parser.nextText());}    } else if (parser.getName().equals(    ProjectSetting.RUNNINGMODE_NAME)) {if (projectCount == currentProject) {    currentSetting.setRunningMode(IntWrapper.wrap(    parser.nextText(),    ProjectSetting.INVALID_MODE));    projectCount++;}    }    break;case XmlPullParser.END_TAG:    break;}event = parser.next();    }} catch (XmlPullParserException e) {    e.printStackTrace();} catch (IOException e) {    e.printStackTrace();}return currentSetting;    }}

如上代码所示,使用PULL方式解析xml文件过程如下:

  1. XmlPullParser parser = Xml.newPullParser()创建一个parser;
  2. parser.setInput(is, "UTF-8")设置输入流的编码方式;
  3.  int event = parser.getEventType()得到一个eventtype;
  4. 之后对这个eventtype循环,检查事件类型,并处理得到的值;
  5. 注意在循环内使用parser.next迭代;






原创粉丝点击