微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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("\r\n找到一篇文章,所属分类:"+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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类