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>
原文链接:https://www.f2er.com/xml/295196.html