文章目录
一、使用SAX解析XML介绍
SAX解析可以在读取文档的时候,就对文档进行处理,而不必等到整个文档装载完才对文档进行处理。
优点:解析可以立即开始,速度快,没有内存压力。
缺点:不能对节点做修改。
二、使用SAX解析XML的步骤
使用Sax解析XML的准备工作:
1.继承DefaultHandler类:这是解析XML的事件处理基类
2.覆盖statDocument
/endDocument
,startElement
/endElement
方法
(1)反射Sax解析工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
(2)创建Sax解析器对象
SAXParser saxParse = spf.newSAXParser();
(3)解析XML文件
File file = new File("src/com/demo.xml");
saxParse.parse(file, new SaxXML());//第二个参数为类名
三、Sax解析XML实例
(1)给出需要解析的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee id="0">
<name>Alexia</name>
<age>23</age>
<sex>Female</sex>
<weight>150</weight>
<weight><a>160</a></weight>
</employee>
<employee id="1">
<name height="178">Edward</name>
<age>24</age>
<sex>Male</sex>
</employee>
<employee id="2">
<name>wjm</name>
<age>23</age>
<sex>Female</sex>
</employee>
<employee id="3">
<name>wh</name>
<age>24</age>
<sex>Male</sex>
</employee>
</employees>
(2)使用Sax对XML进行解析
说明:从上到下,依次打印XML中所有元素的属性名。
package com.test;
import java.io.File;
import javax.xml.parsers.ParserConfigurationException;
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;
/**
* 类说明:
* 使用SAX解析XML
* 使用Sax解析XML的准备工作:
* 1.继承DefaultHandler类:这是解析XML的事件处理基类
* 2.覆盖statDocument/endDocument,startElement/endElement方法
*
* Sax解析XML的步骤:
* 1.反射一个Sax解析工厂对象
* 2.创建Sax解析器对象
* 3.解析XML文件
*
* @author qianliangguo
*/
public class SaxXML extends DefaultHandler{
public static void main(String[] args) throws Exception{
//1.反射一个Sax解析工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
//2.创建Sax解析器对象
SAXParser saxParse = spf.newSAXParser();
//3.解析XML文件
File file = new File("src/com/demo.xml");
saxParse.parse(file, new SaxXML());
}
@Override
public void startDocument() throws SAXException {
System.out.println("开始解析文档:");
}
@Override
public void endDocument() throws SAXException {
System.out.println("文档解析结束.");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("开始解析元素"+qName+",");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println(qName+"元素解析结束.");
}
}
解析效果: