Android SAX解析xml文件
andorid读取xml文件内容方法有三种 sax dom pull,其中 pull是android自带的
1.先认识一下xml文件中的些术语
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>23</age>
</person>
<person id="22">
<name>李量</name>
<age>25</age>
</person>
</persons>
xml中的标签和内容都可以叫做节点,其中的persons person name age 这些都叫做元素(element).而像李明 25 这些值叫做文本节点.那么有个问题 中<persons>到<person>之间的是什么,什么都没有? 答案是他也是节点,是文本节点,你会说他里面什么都没有啊,错了,它有回车和空格.这个在sax解析xml中你debug一下就会发现.回车和空格(或者是tab)是会被读取出来的.id是属性.
2.sax
sax是采用事件驱动,就是说他不需要完全读完xml文件,他是读到一个节点就解析一个节点是否符合xml语法,如果符合就调用相对应的方法其实就是回调方法,并且没有记忆功能.下面提到的这些方法都是在ContentHander()接口中的方法.
startDocumnet() :当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
startElement() 当开始解析元素的开始标签的时候,就会触发这个事件
characters() 当读到文本元素的时候要触发这个事件.
endElement() 当读到结束标签的时候 就会触发这个事件
sax就是这样按照顺序来解析的.
3.sax读取xml文件举例
3-1创建一个项目 ReadXml
3-2将xml文件拷贝到根目录下.
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>23</age>
</person>
<person id="22">
<name>李量</name>
<age>25</age>
</person>
</persons>
可以看出这个xml文件中有一个可以抽象出来的对象 就是person 属性有id name age
那么我们就建立一个bean
3-3:创建bean
Java代码
package com.leequer.service.demo;
/**
* <person id="23">
<name>李明</name>
<age>23</age>
</person>
<person id="22">
<name>李量</name>
<age>25</age>
</person>
* @author leequer
*
* xml文件对应的bean
*/
public class Person {
private Integer id;
private String name;
private int age;
public Person ()
{}
public Person (String name ,int age)
{
this.name = name;
this.age = 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.id+",name "+this.name+" age "+this.age+"\n";
}
}
3-4:遵循mvc的架构,我们建立一个service用来读取xml
Java代码
package com.leequer.service;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;
import com.leequer.service.demo.Person;
public class SaxReadxml {
public static List<Person> readXml(InputStream inStream)throws Exception {
SAXParserFactory spf = SAXParserFactory.newInstance(); // 初始化sax解析器
SAXParser sp = spf.newSAXParser(); /
补充:移动开发 , Android ,