SAX解析XML
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,length); if(!str.trim().equals("")){ //xml文档中有很多节点的值是空的,如student System.out.println("内容:"+str); } } @Override public void endElement(String uri,String qName) throws SAXException { super.endElement(uri,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(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |