JAXP学习总结

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);
		}
	} 
}



 

原文地址:https://www.cnblogs.com/javawebsoa/p/3112916.html