Android学习之使用SAX解析xml文件
Android上经常使用xml来传递和交换数据。SAX(Simple API for XML)作为一种解析速度快并且占用内存少的xml解析器,非常适合Android等移动设备。SAX解析采用事件驱动,会判断当前读取到的字符是否符合xml语法中的某部分,从而触发相应事件。xml中的节点分为2种类型,分别是Element Node(元素节点)和Text Node(文本节点)。对于元素节点,当读取到开始标签时会触发startElement事件,当读取到结束标签时会触发endElement事件。对于文本节点,当读取到文本时会触发characters事件。另外,xml文档开始和结束时会分别触发startDocument和endDocument事件。所谓事件其实就是一些回调方法,这些方法定义在ContentHandler接口中,用SAX解析一个xml文件主要也就是要根据xml文件的节点等信息编写一个实现ContentHandler接口的实现类。
以下会用SAX解析这个test.xml文件,并用AndroidTextCase测试结果是否正确。
text.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>liming</name>
<age>30</age>
</person>
<person id="20">
<name>lixiang</name>
<age>25</age>
</person>
</persons>
过程如下:
在Eclipse下新建一个Android项目xml01
新建text.xml文件,放在src目录下面
新建一个JavaBean:Person,属性有id、name、age
编写一个业务类:SAXPersonService,解析test.xml文件,这里重点是根据test.xml文件中的节点名称等信息编写SAXParserHandler这个内部类,代码如下:
package com.study.service;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.study.bean.Person;
/**
* 使用SAX解析text.xml文件
* @author Administrator
*
*/
public class SAXPersonService {
public List<Person> getPersons(InputStream inputStream) throws Throwable{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
SAXParserHandler handler = new SAXParserHandler();
parser.parse(inputStream, handler);
return handler.getPersons();
}
private final class SAXParserHandler extends DefaultHandler{
private List<Person> persons;
// 记录正在访问的文本节点的前一个节点名称
private String tag;
private Person person;
public List<Person> getPersons() {
return persons;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(tag != null){
if("name".equals(tag)){
相关新闻>>
- 发表评论
-
- 最新评论 更多>>