您的位置:首页 > 其它

SAX解析XML文件的简单应用

2016-08-12 14:11 537 查看
SAX顺序读取XMl文件时,并非一次性将XML文件读到内存中去,而是一段一段的读到内存中。SAX的解析器是基于事件的模型,解析XML文件时会触发一系列事件。SAX占用内存小、处理灵活,对于手机端的开发比较适合。

如果需要对XMl文件反复操作,并且做修改等动作,SAX就不适合了。

案例:简单读取XMl文件中的内容

1、 通过继承DefaultHandler,并重写四个函数即可完成解析操作

public class MyXmlReadHandler extends DefaultHandler{
private String tagName;
private Student student = null;
private List<Student> lists = null;

public List<Student> getLists() {
return lists;
}

/**
* 读取XML文件开始(初始化集合对象)
*/
@Override
public void startDocument() throws SAXException {
lists = new ArrayList<Student>();
}

/**
* 读取标签开始(初始化student对象)
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
tagName = qName;
if(tagName.equals("student")){
student = new Student();
}
}

/**
* 读取标签内容(给对象student属性赋值)
* 通过简单的if-else判断方式
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (tagName != null) {
String data = new String(ch, start, length);
if (tagName.equals("name")) {
student.setName(data);
}else if (tagName.equals("age")) {
student.setAge(data);
}else if (tagName.equals("sex")) {
student.setSex(data);
}
}
}

/**
* 读取标签内容结束(给集合对象赋值)
* 并注意:tagName = null
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("student")){
lists.add(student);
}
tagName = null;
}
}


2、 调用方法

public class XmlSax {

public static void main(String[] args) throws Exception {

InputStream ins = Thread.currentThread().getContextClassLoader().getResourceAsStream("students.xml");
MyXmlReadHandler readHandler = new MyXmlReadHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser sp = factory.newSAXParser();
sp.parse(ins, readHandler);
ins.close();

List<Student> lists = readHandler.getLists();
for (Student person : lists) {
System.out.println("--------------");
System.out.println("name:"+person.getName());
System.out.println("age:"+person.getAge());
System.out.println("sex:"+person.getSex());
}

}
}


3、 XML文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id='0001'>
<name>stu01</name>
<age>20</age>
<sex>男</sex>
</student>
<student id='0002'>
<name>stu02</name>
<age>22</age>
<sex>女</sex>
</student>
</students>


4、 执行结果

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