Xml数据原型为:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>30</age>
</person>
<person id="20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
--------------------------------------------------》
1. 编写XML解析类
package cn.android.util;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import cn.android.domain.Person;
/**
* 继承DefaultHandler类
* 用于解析XML文档的解析类
* @author Administrator
*
* 2010-6-28 下午07:51:20
*/
public class XmlParser extends DefaultHandler{
//此处将XML里的数据封装成Person类,personList用于装解析后的数据
private List<Person> personList = new ArrayList<Person>();
//定义一个Person引用
private Person person = null;
//定义一个标记变量,标记当前的Xml文件被解析到哪个标签
private String currentTag = null;
/**
* 返回解析后的数据,是一个对象数组
* @return
*/
public List<Person> getObjectListFromXML() {
return personList;
}
/**
* 解析XML时,当开始读到一个元素标签开始时,执行下面方法
*/
@Override
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
//判断标签名是否为person,是的话创建一个Person对象,并将其id属性拿出来,赋值到person对象中
if("person".equals(localName)) {
person = new Person();
Integer id = new Integer(attributes.getValue(0));
person.setId(id);
}
//标记当前标签名
currentTag = localName;
}
/**
* 解析XML时,当开始读到一个文本元素时,执行下面方法
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//判断此文本元素是在一个 有效的标签体里面的 例:正确:<name>文本元素</name> 错误: 文本元素<name></name>
if(currentTag != null) {
//如果此文本元素为有效,则得到它的内容
String value = new String(ch, start, length);
//如果是在name标签里,则赋值给person的name属性
if("name".endsWith(currentTag)) {
person.setName(value);
}
//如果是在age标签里,则赋值给person的age属性
if("age".endsWith(currentTag)) {
person.setAge(new Short(value));
}
}
}
/**
* 解析XML时,当读到结束一个元素标签时,执行下面方法
*/
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
//将当前标签名制空
currentTag = null;
//如果当前结束的标签名是person的话,代表一个person对象已经读取完毕。将其添加到list后制空
if("person".endsWith(localName)) {
personList.add(person);
person = null;
}
}
}
---------------------------------------------------------------------------------------------------------------------》
2。测试类:
package cn.android.xml;
import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import android.test.AndroidTestCase;
import android.util.Log;
import cn.android.domain.Person;
import cn.android.util.XmlParser;
public class TestSAX extends AndroidTestCase {
public void testParse() throws Throwable {
try {
//得到SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
// 设置解析器的相关特性,http://xml.org/sax/features/namespaces = true 表示开启命名空间特性
// saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
SAXParser saxParser = spf.newSAXParser(); // 创建解析器
//得到SAX解析实现类
XmlParser handler = new XmlParser();
//将xml文件以输入流的形式读入到内存中。
InputStream inStream = XmlParseActivity.class.getClassLoader().getResourceAsStream("person.xml");
//开始解析
saxParser.parse(inStream, handler);
//关闭输入留
inStream.close();
//将得到的每个对象信息写入到日志中
for(Person person : handler.getObjectListFromXML()) {
Log.i("XmlParseActivity", person.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:域对象Person类:
package cn.android.domain;
public class Person {
private Integer id;
private String name;
private Short age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
@Override
public String toString() {
return id + "---" + name + "---" + age;
}
}
分享到:
相关推荐
本代码是我对博客的xml解析----------Sax解析的代码重写了,一份,给需要的朋友,做参考。
android 学习笔记1--SAX解析XML,了解下如何用sax解析xml吧
android-关于xml的解析 有注释
【正文】 一、XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器获取数据。
使用SAX方式解析XML SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件...
Android 创建与解析XML Sax方式
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
行业文档-设计装置-基于android平台SAX解析XML错误问题的方法.zip
android用sax解析xml文件实例源码
使用sax解析从网络上获取的xml文件
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
Android SAX 解析XML SAX 解析XML(通用)
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
读取和解析xml文件
Android之SAX解析
Android sax引擎解析xml文件 博客:http://blog.csdn.net/yelangjueqi/article/details/9769863
分别实现了android 最常用的SAX和PULL解析方式,并附有详尽分析
NULL 博文链接:https://z251257144.iteye.com/blog/1356394
Android XML解析之SAX解析 简单方便的解析方法
NULL 博文链接:https://byandby.iteye.com/blog/836754