1.JAXP简介
和DOM一样,都是一种XML解析技术。JAXP开发包是JavaSE的一部分
在javax.xml.parsers包中,定义了几个工厂类,通过调用这些工厂类,可以得到对XML文档进行解析的DOM或SAX的解析器对象
2.SAX解析的特点
不同于DOM解析,SAX无需加载整个XML文档,即在读取文档的时候便对文档进行处理
SAX采用事件处理的方式解析XML文件,利用SAX解析XML文档,涉及 解析器 和 事件处理器 两个部分。
解析器:可以使用JAXP的API创建,创建出SAX解析器后,便可以指定解析器去解析某个XML文档。
事件处理器:由程序员编写
3.DEMO
有如下XML文件car.xml
<?xml version="1.0" encoding="UTF-8"?>
<车辆清单>
<汽车>
<车牌 出产时间="2011年">奥迪</车牌>
<产地>北京</产地>
<单价>30</单价>
</汽车>
</车辆清单>
使用SAX解析该文件
package web.java.xml.sax;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
/**
* 基于SAX解析XML文件
* @author well
*
*/
public class Demo1 {
public static void main(String[] args) throws Exception {
//创建SAX解析器工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//创建SAX解析器
SAXParser saxParser = factory.newSAXParser();
File file = new File("src/web/java/xml/sax/car.xml");
//加载XML文件
saxParser.parse(file, new MyHanler());
}
}
//自定义SAX处理器
class MyHanler extends DefaultHandler{
public void startElement(
String uri,
String localName,
String qName,
Attributes attributes){
System.out.println("<"+qName+">");
System.out.println("有"+attributes.getLength()+"个属性");
System.out.println(attributes.getValue("出产时间"));
}
public void endElement(
String uri,
String localName,
String qName){
System.out.println("</"+qName+">");
}
public void characters(
char[] ch,
int start,
int length){
String content = new String(ch,start,length);
if(content.trim().length()>0){
System.out.println(content);
}
}
}