XML解析之SAX解析技术案例
Java代码: packagecom.xushouwei.xml;
importjava.io.File; importjava.io.IOException; importjava.text.DateFormat; importjava.text.SimpleDateFormat; importjavax.xml.parsers.ParserConfigurationException; importjavax.xml.parsers.SAXParser; importjavax.xml.parsers.SAXParserFactory; importorg.xml.sax.Attributes; importorg.xml.sax.SAXException; importorg.xml.sax.helpers.DefaultHandler; /** * SAX解析XML数据 * 原理: * SAX解析器对XML文档解析会从XML文档开始位置起进行解析,同事根据已经定义好的事件处理器,来决定当前所解析的部分(元素、属性、或是元素内容)是否有必要记录并保存。相对于DOM解析,他的有点事占用内存小查找速度更快点。 *@author徐守威 * */ publicclassSAXParseDemo { publicstaticvoidmain(String[] args) { //创建解析XML文档对象,其保存在E盘的根目录下的article.xml File xmlFile=newFile("E:article.xml"); //创建一个SAXParserFactory对象,通过单例模式创建,SAXParserFactory对象相当于是SAXParser解析器的创建工程,通过SAXParserFactory.newInstance()方法创建SAXParserFactory对象 SAXParserFactory factory=SAXParserFactory.newInstance(); try{ //从SAXParserFactory得到SAXParser对象 SAXParser parser=factory.newSAXParser(); //解析文件内容 parser.parse(xmlFile,newMySaxHandler()); }catch(IOException e) { //TODOAuto-generated catch block e.printStackTrace(); } }catch(ParserConfigurationException e) { }catch(SAXException e) { } //因为SAX解析是事件驱动的,因此我们这里定义一个时间的监听器对象,MySaxHandler,该类可以继承DefaultHandler类,这类似Swing中的事件监听器,这里要了解一下 classMySaxHandlerextendsDefaultHandler { //格式化日期格式 staticDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //内容 privateString content; //事件发生时元素中的字符 @Override publicvoidcharacters(char[] ch,intstart,intlength) throwsSAXException { //TODOAuto-generated method stub content=newString(ch,start,length); //当解析到元素的结束标签时触发 publicvoidendElement(String uri,String localName,String qName) //如果是标题 if("title".equals(qName)) { System.out.println("标题:"+content); //如果是作者 elseif("author".equals(qName)) System.out.println("作者:"+content); //如果是邮件 elseif("email".equals(qName)) System.out.println("邮件:"+content); //如果是内容 elseif("body".equals(qName)) System.out.println("内容:"+content); //如果是日期 elseif("date".equals(qName)) System.out.println("日期:"+content); //当解析到元素的开始标签时触发 publicvoidstartElement(String uri,String qName, Attributes attributes)throwsSAXException { if("article".equals(qName)) //如果节点名称为article,则输出article元素属性category System.out.println("rn找到一篇文章,所属分类:"+attributes.getValue("category")+"."); } xml代码: <?xml version="1.0" encoding="GB2312"?> <articles> <article category="Android"> <title>Android学习之路</title> <author>徐守威</author> <email>shouweixu@foxmail.com</email> <date>2016-05-20</date> </article> <article category="JavaWeb"> <title>JavaWeb学习笔记</title> <author>Jasxu</author> <email>shouweixu@qq.com</email> <date>2016-05-21</date> </article> </articles> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |