标签:
SAX
事件处理(事件驱动),不需要载入整个文档,流机制读取,分析XML文档
startDocument
startElement
character
endElement
endDocument
当sax扫描到文档时就调用startDocument函数,sax扫描到文档结束符时就调用endDocument函数,也就是说当sax扫描到哪个节点时就会调用相应的函数,同时还会携带节点的属性值。
当它扫描到节点内容值时就会调用character函数
Sax主要是用来对xml文件遍历,解析,不提供修改、删除、添加等操作,可以处理大的文档查询的操作。
SAX 当解析器发现元素开始、元素结束,文本、文档的开始或者结束时,发送 事件,在程序中编写响应这些事件的代码,其特点如下:
优点:不用事先调入整个文档,占用资源少。尤其在嵌入式环境中,极力推荐采用SAX进行解析XML文档。
缺点:不像DOM一样将文档长期驻留在内存,数据不是持久的,事件过后,如没有保存数据,那么数据就会丢失。
使用场合:机器性能有限,尤其是在嵌入式环境,如Android,极力推荐采用SAX进行解析XML文档。
package com.huang; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; /** * SAX解析XML文档 * @author Admin * */ class MyHandler extends DefaultHandler{ //扫描文本开始 @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } //扫描到元素 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //qName表示节点名称,attributes表示节点属性值 super.startElement(uri, localName, qName, attributes); System.out.println(qName); //输出每个节点名称 String s = attributes.getValue("学生称号"); if (s != null) { System.out.println("学生称号:" + s); } } //扫描到文本时,元素值时(包括空的,如root,student等) @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String str = new String(ch, start, length); if(!str.trim().equals("")){ //xml文档中有很多节点的值是空的,如student System.out.println("内容:"+str); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } } public class Sax { public static void main(String[] args) { // TODO Auto-generated method stub SAXParserFactory saxpf = SAXParserFactory.newInstance(); SAXParser saxp; try { saxp = saxpf.newSAXParser(); //将扫描仪与事件处理绑定 saxp.parse("./src/data.xml", new MyHandler()); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012432475/article/details/46701087