加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析之SAX解析技术案例

发布时间:2020-12-16 02:23:04 所属栏目:百科 来源:网络整理
导读:Java代码: package com.xushouwei.xml; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParse

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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读