您的位置:首页 > 移动开发 > Android开发

Android 采用SAX解析XML内容 【学习记录】

2012-04-27 11:35 393 查看
测试所用的xml文件

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<persons>
<person id="24">
<name>Danny</name>
<age>24</age>
</person>
<person id="23">
<name>Kiki</name>
<age>23</age>
</person>
</persons>


Java 代码文件

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.android.mldn.domain.Person;

/**
* 采用SAX解析XML内容
* @author Mik
*
*/

public class SAXPersonService {
public List<Person> getPersons(InputStream inStream)throws Throwable{
//创建SAXParserFactory 实例
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到  SAXParser 的一个解释器
SAXParser parser = factory.newSAXParser();
//实例化一个 PersonParser 该类实现了ContentHandler接口
PersonParser personParser = new PersonParser();

parser.parse(inStream, personParser);

inStream.close();
return personParser.getPersons();

}

//该类负责解析 xml 数据
private final class PersonParser extends DefaultHandler{
private List<Person> persons = null;
//用来记录元素节点的 名称
private String tag = null;
private Person person = null;

public List<Person> getPersons(){
return persons;
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (tag!=null) {
//获取文本节点的数据
String data = new String(ch, start, length);
if ("name".equals(tag)) {
person.setName(data);
}else if ("age".equals(tag)) {
person.setAge(new Short(data));
}
}
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("person".equals(localName)) {
//一组读取完毕就添加到person 对象当中
persons.add(person);
person = null;
}
//读到 节点末尾
tag = null;
}

@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("person".equals(localName)) {
//创建 person 对象
person = new Person();
person.setId(new Integer(attributes.getValue(0)));
}
//记录元素节点的 名称
tag = localName;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐