和DOM一样,都是一种XML解析技术。JAXP开发包是JavaSE的一部分
在javax.xml.parsers包中,定义了几个工厂类,通过调用这些工厂类,可以得到对XML文档进行解析的DOM或SAX的解析器对象
不同于DOM解析,SAX无需加载整个XML文档,即在读取文档的时候便对文档进行处理
SAX采用事件处理的方式解析XML文件,利用SAX解析XML文档,涉及 解析器 和 事件处理器 两个部分。
解析器:可以使用JAXP的API创建,创建出SAX解析器后,便可以指定解析器去解析某个XML文档。
事件处理器:由程序员编写
有如下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); } } }