android xml解析

android xml 解析

在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。

SAX特点: 解析方式是一种基于事件驱动的,消耗的内存少

Pull特点: 解析方式是一种基于事件驱动的,消耗的内存少,在android系统内部的xml解析都是用这种方式

Dom特点: dom是把全部文件读入到内存中,这种方式很消耗内存,对于内存资源本来就很少的android手机,这种 方式不太建议使用。

个人建议:  SAX和pull都比较适合mobile,Dom适合服务器解析,随着mobile手机的内存增加,Dom也许可以使用。

SAX解析例子:

XML:

[html]

<?xml version="1.0" encoding="utf-8"?>

<users>

<user name="admin0" age="26">root0</user>

<user name="admin1" age="26">root1</user>

<user name="admin2" age="26">root2</user>

<user name="admin3" age="26">root3</user>

</users>

放在src/目录下

SAXHandler:

[java]

package com.hualu.androidxml;

import java.util.ArrayList;

import java.util.List;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class SAXHandler extends DefaultHandler {

private List<User> users ;

User user ;

int i = 1 ;

@Override

public void startDocument() throws SAXException {

users = new ArrayList<User>() ;

}

@Override

public void endDocument() throws SAXException {

super.endDocument();

}

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

if("user".equals(localName)){

i = 2 ;

user = new User() ;

user.setName(attributes.getValue("name")) ;

user.setAge(attributes.getValue("age")) ;

}

}

@Override

public void endElement(String uri, String localName, String qName)

throws SAXException {

if("user".equals(localName)){

users.add(user) ;

}

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

if(i == 2)

user.setPassword(String.valueOf(ch,start,length)) ;

i = 1 ;

}

public List<User> getUsers() {

return users ;

}

}

SAXClient:

[java]

package com.hualu.androidxml;

import java.io.InputStream;

import java.util.List;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import android.content.Context;

public class SAXClient {

public void parserXML(Context context) {

try {

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

SAXHandler handler = new SAXHandler() ;

InputStream file = SAXClient.class.getClassLoader().getResourceAsStream("user.xml");

parser.parse(file, handler) ;

List<User> users = handler.getUsers() ;

for(User user: users){

System.out.println(user.getName() + " ; " + user.getPassword() + "  ;  " + user.getAge());

}

} catch (Exception e) {

}

}

}

具体步骤:

1、实例化一个工厂SAXParserFactory

2、实例化SAXPraser对象,创建XMLReader 解析器

3、实例化Handler,处理器

4、注册解析器

4、读取文件流

5、解析文件

Pull解析例子:

XML:

[html]

<?xml version="1.0" encoding="utf-8"?>

<users>

<user name="admin0" age="26">root0</user>

<user name="admin1" age="26">root1</user>

<user name="admin2" age="26">root2</user>

<user name="admin3" age="26">root3</user>

</users>

放在res/xml目录下。

PullXMLParser:

[java]

package com.hualu.androidxml;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.res.XmlResourceParser;

public class PullXMLParser {

private Activity activity ;

public PullXMLParser(Activity activity ){

this.activity  = activity;

}

public List<User> parser(){

List<User> users = new ArrayList<User>() ;

XmlResourceParser xrParser = activity.getResources().getXml(R.xml.user);

try{

while(xrParser.getEventType() != XmlResourceParser.END_DOCUMENT) {

if(xrParser.getEventType() == XmlResourceParser.START_TAG){

String tagName = xrParser.getName() ;

if("user".equals(tagName)){

User user = new User() ;

user.setName(xrParser.getAttributeValue(null, "name")) ;

user.setAge(xrParser.getAttributeValue(null, "age")) ;

user.setPassword(xrParser.getText()) ;

users.add(user) ;

}

}

xrParser.next() ;

};

}catch (Exception e) {

}

return users ;

}

}

具体步骤:

1. 通过Resource,取得XML文件数据,实例化一个 XmlResourceParser

2. 通过 XmlResourceParser的事件判断,解析XmL

这种方式比SAX简单些(个人认为)。

时间: 2024-10-07 13:17:44

android xml解析的相关文章

Android xml 解析

XML 常用的三种解析方式: DOM: 全部加载到内存,生成一个树状结构,占用内存比较大. SAJ: 采用事件驱动,速度快,效率高,不支持回退. PULL:也是采用事件驱动,语法简洁. 步骤: 1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser(); 2. 配置解析器:parser.setInput(is, "utf-8");// 参数为 xml 文件输入流 和 编码方式. 3. 根据事件进行解析. int type = pars

Android Xml解析之DOM详细攻略

参考地址:http://wenku.baidu.com/view/aca83d12cc7931b765ce15d1.html 由于dom方式是保存于内存中,比较耗内存,不过对于一些数据量比较小但又比较常用的隐秘信息,可以用此方法 People类是自己写的一个类,主要保存各个字符串数据. 1.为了具有扩展性 自己编了一个xml文件: <?xml version="1.0" encoding="utf-8"?> <peoples> <peo

android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象 android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的

android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml 1.文件准备 把一个预先写好的xml文件放在android项目目录的 asset 文件夹. 文件内容为: <blog> <age>30</age> <

android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml 1.JavaBeen package com.android10; public class Person { String pName ; String pAge ; public String getpName() { return pName; } pub

android XMl 解析神奇xstream 二: 把对象转换成xml

前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 package com.android10; public class Product { private String name ; private String age ; public String getName() { return name; } public void setName(Strin

android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象 1.建立JavaBeen package com.android10; public class

android XML解析器全解案例

1.使用pull解析 1 package com.example.myxml; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.xmlpull.v1.XmlPullParser; 8 import org.xmlpull.v1.XmlPullParserFactory; 9 10 import android.util.Log; 11 imp

Android] Android XML解析学习——方式比较

[Android] Android XML解析学习——方式比较 (ZT) 分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/details/5981913) 一.基础知识 经过这段时间的学习,我们已经了解了Android平台上用于解析XML的三种方式:SAX.DOM和Pull.并且在学习的过程中也介绍了这三种方式各自的特点及适合的使用场合,简单的来说,DOM方式最直观和容易理解,但是只适合XML文档较小的时候使用,而SAX方式更适合