SAX解析----详解
(1)什么是SAX解析
SAX解析器是对XML文档解析会从XML文档开始位置起进行解析,同时根据已经定义好的事件处理器,来决定当前所解析的部分(元素/属性或是元素内容)是否有必要记录并存储。
(2)示例部分
SAXDemo.java
View Code
package TestFor0330; import java.io.File; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class SaxDemo { public static void main(String[] args) { //创建解析的XML文档对象,其保持在根目录下 File file=new File("article.xml"); //创建一个SAXParserFactory对象,通过单例形式 SAXParserFactory factory=SAXParserFactory.newInstance(); try { //创建SAXParser对象 SAXParser parser=factory.newSAXParser(); //解析文件,定义解析时代事件处理 parser.parse(file, new MySaxHandler()); } catch (Exception e) { e.printStackTrace(); } } }
MySaxHandler.java
View Code
package TestFor0330; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MySaxHandler extends DefaultHandler { //格式化 static DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //内容 private String content; //事件发生时元素中的字符 @Override public void characters(char[]ch,int start,int lenght)throws SAXException{ content=new String(ch,start,lenght); } //当解析到元素的结束标签时触发 @Override public void endElement(String uri,String localName,String qName)throws SAXException{ if("title".equals(qName)){ System.out.println("标题:"+content); }else if("author".equals(qName)){ System.out.println("作者:"+content); }else if("email".equals(qName)){ System.out.println("电子邮箱:"+content); }else if("body".equals(qName)){ System.out.println("内容:"+content); }else if("date".equals(qName)){ System.out.println("时间:"+content); } } //当解析到元素的开始标签时触发 @Override public void startElement (String uri,String localName,String qName,Attributes attributes) throws SAXException{ if("article".equals(qName)){ System.out.println("\r\n找到一篇文章,所属分类:"+attributes.getValue("category")+"."); } } }
article.xml
View Code
<articles> <article category="xml"> <title> XML 概述</title> <author>janet</author> <email>winfu@163.com</email> <date>20080801</date> </article > <article category="java"> <title> Java 基本语法</title> <author>janet</author> <email>winfu@163.com</email> <date>20080801</date> </article> </articles>
运行结果:
找到一篇文章,所属分类:xml.
标题: XML 概述
作者:janet
电子邮箱:winfu@163.com
时间:20080801
找到一篇文章,所属分类:java.
标题: Java 基本语法
作者:janet
电子邮箱:winfu@163.com
时间:20080801
(3)代码分析
首先要通过三个步骤解析XML文件
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
parser.parse(file, new MySaxHandler());
在解析XML数据时,要创建一个解析的监听器对象,这里通过继承DefaultHandle.