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

本文详细介绍了如何使用PULL方式解析XML文件,包括XML文件的特性对比、示例代码实现及解析流程。适用于处理较大XML文件场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前已经分别介绍过使用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迭代;






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值