`
百合不是茶
  • 浏览: 345919 次
社区版块
存档分类
最新评论

XML的SAX解析

阅读更多

SAX是一个顺序执行,事件驱动的解析方法(事件驱动,简单地说就是你点什么按钮(即产生什么事件))

 

SAX的工作原理;

     

1.在文档的开始和结束时触发文档处理事件。
2.在文档内每一XML元素接受解析的前后触发元素事件。
3.任何元数据通常由单独的事件处理
4.在处理文档的DTD或Schema时产生DTD或Schema事件。
5.产生错误事件用来通知主机应用程序解析错误。
 

 
DOM解析博客地址连接:DOM解析
SAX与DOM解析的优点;SAX解析适合较大的XML文件解析,DOM可以增加节点
 
SAX解析的主要方法;
1,创建解析工厂实例
2,创建解析工厂
3,解析xml
 startElement() 回调在每次 SAX 解析器遇到元素的起始标记时被调用
characters() 回调为字符数据所调用
endElement() 为元素的结束标记所调用
DefaultHandler类
 
JAVA解析xml文档;

 代码如下
package SAX解析;

import java.util.ArrayList;
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解析 1.创建解析工厂
 *  2,创建解析工厂实例 
 *  3,工厂实例来解析XML(本地文件,文件解析器)
 * 
 * @author Administrator
 */
public class SAXDemo {
	ArrayList<Student> list;
	Student stu;
	String strValue;

	public static void main(String[] args) throws Exception {
		SAXDemo demo = new SAXDemo();
		demo.sefa();

	}

	public void sefa() throws Exception {
		//开始时间
		long l1=System.currentTimeMillis();
		// 创建工厂实例
		SAXParserFactory factory = SAXParserFactory.newInstance();
		// 创建解析工厂
		SAXParser parser = factory.newSAXParser();
		String f = "C:\\Users\\Administrator\\Desktop\\xml\\student2.xml";
		MyDefaultHandler hb = new MyDefaultHandler();
		// 解析XML
		parser.parse(f, hb);
		long l2= System.currentTimeMillis();
		long end =l2-l1;
		//1818ms
		System.out.println("解析时间:"+end+"ms");
	}

	/**
	 * 创建外部类,解析XML startDocument开始读取文本 startElement开始读取元素
	 */

	class MyDefaultHandler extends DefaultHandler {
		// 开始读取文本
		public void startDocument() throws SAXException {
			System.out.println("开始解析..");
			list = new ArrayList<Student>();
		}
		// 结束文本读取
		public void endDocument() throws SAXException {
			// 遍历队列
			for (Student strs : list) {
				System.out.println(strs);
			}
			System.out.println("解析完成..");
		}

		// 开始读取元素
		public void startElement(String uri, String localName, String qName,
				Attributes attr) throws SAXException {
			if (qName.equals("stu")) {
				stu = new Student();
				list.add(stu);
				String nums = attr.getValue("num");
				String nos = attr.getValue("no");
				if (nums != null) {
					 stu.num = Integer.parseInt(nums);
				}
				if (nos != null) {
					stu.no = Integer.parseInt(nos);
				}

			}
		}

		// 结束元素的读取
		public void endElement(String uri, String localName, String qName)
				throws SAXException {

			if (qName.equals("name")) {
				stu.name = strValue;
			}
			if (qName.equals("sex")) {
				stu.sex = strValue;
			}
			if (qName.equals("cla")) {
				stu.cla = strValue;
			}
		}

		// 读取字符串
		public void characters(char ch[], int start, int length)
				throws SAXException {
			// 创建字符串
			strValue = new String(ch, start, length);
		}

	
	}

}
 

 
 
 
  • 大小: 35 KB
  • 大小: 11.1 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics