使用SAX读取XML文件--(SAX的基础语法练习)

SAX的基本知识:

XML的SAX解析:
 DOM解析原理:一次性把XML文档加载进内存,然后在内存中构建Document树,对内存要求比较高。
        DOM解析缺点:不适合读取大容量的XML文件,容易导致内存溢出。

 SAX解析原理:加载一点,读取一点,处理一点,对内存要求比较低。
 
 SAX解析工具:Sun公司提供的。内置在jdk中。org.xml.sax.*
 核心的API:
  SAXParser类:用于读取和解析XML文件对象
   parse(File 飞,DefaultHandler dh)方法;解析XML文件
  参数一:File:表示读取的XML文件
  参数二:DefaultHandler:SAX事件的处理程序。使用DefaultHandler的子类
 DefaultHandler类的API:
  void startDocument() : 在读到文档开始时调用
  void endDocument() :在读取文档结束时调用
  void startElement(String url,String localName,String qName,Attributes attributes):读到开始标签是调用
  void endElement(String url,String localName,String qName);读到结束标签时调用

======DOM解析    VS     SAX解析======
DOM解析
    原理:一次性加载XML文档,不适合大容量文件读取;
    DOM解析可以任意进行增删改查
    DOM解析任意读取任何位置的数据,甚至往回读
    DOM解析面向对象的编程方法(Node,Element,Attribute)Java开发者编译比较简单
SAX解析
    原理:加载一点,读取一点,处理一点。适合大容量文件读取
    SAX解析只能读取
    SAX解析只能从上往下,按顺序读取,不能往回读
    SAX解析基于事件的编译方法,Java开发编译相对复杂

 

实现的功能:使用SAX读取contact.xml文件:

XML文件:contact.xml

<?xml version="1.0" encoding="utf-8"?>
<contactList>
	<contact id="001" name="eric">
		<name>张三</name>
		<age>20</age>
		<phone>134222223333</phone>
		<email>zhangsan@qq.com</email>
		<qq>432221111</qq>
	</contact>
	<contact id="002" name="jacky">
		<name>eric</name>
		<age>20</age>
		<phone>134222225555</phone>
		<email>lisi@qq.com</email>
		<qq>432222222</qq>
	</contact>
</contactList>

实现功能的处理程序:MyDefaultHandler.java

package SAX;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/*
 * SAX处理程序(如何解析XML文件)
 */
public class MyDefaultHandler extends DefaultHandler {
	/*
	 * 开始文档时调用
	 */
	@Override
	public void startDocument() throws SAXException {
		System.out.println("MyDefaultHandler.startDocument()");
	}
	
	/*
	 *开始标签时调用 
	 *@param qName:表示开始标签的标签名
	 *@param attributes :表示开始镖旗内包含的属性列表
	 */
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		System.out.println("MyDefaultHandler.startElement()-->"+qName);
	}
	
	/*
	 * 结束标签时调用
	 * @param qName:结束标签的标签名称
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		System.out.println("MyDefaultHandler.endElement()-->"+qName);
	}
	
	/*
	 * 读到文本内容时调用
	 * @param ch: 表示当前读完的所有文本内容
	 * @param start: 表示当前文本内容的开始位置
	 * @param length: 表示当前文本内容的长度
	 */
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		//得到当前文本内容
		String content = new String(ch,start,length);
		System.out.println("MyDefaultHandler.characters()-->"+content);
	}
	
	/*
	 * 结束文档时调用
	 */
	@Override
	public void endDocument() throws SAXException {
		System.out.println("MyDefaultHandler.endDocument()");
	}
}


实现的主程序:Demo_sax.java

package SAX;

import java.io.File;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
/*
 * 第一个SAX读取XML文件程序
 */

public class Demo_sax {
	public static void main(String[] args) throws Exception {
		//1.创建SAXParse对象
		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
		//2.调用parse方法      参数一:XML文档;参数二:DefaultHandler的子类
		parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值