XML解析之SAX解析技术案例
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.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* SAX解析XML数据
* 原理:
* SAX解析器对XML文档解析会从XML文档开始位置起进行解析,同事根据已经定义好的事件处理器,来决定当前所解析的部分(元素、属性、或是元素内容)是否有必要记录并保存。相对于DOM解析,他的有点事占用内存小查找速度更快点。
* @author 徐守威
*
*/
public class SAXParseDemo {
public static void main(String[] args) {
//创建解析XML文档对象,其保存在E盘的根目录下的article.xml
File xmlFile=new File("E:\\article.xml");
//创建一个SAXParserFactory对象,通过单例模式创建,SAXParserFactory对象相当于是SAXParser解析器的创建工程,通过SAXParserFactory.newInstance()方法创建SAXParserFactory对象
SAXParserFactory factory=SAXParserFactory.newInstance();
try {
//从SAXParserFactory得到SAXParser对象
SAXParser parser=factory.newSAXParser();
//解析文件内容
try {
parser.parse(xmlFile, new MySaxHandler());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//因为SAX解析是事件驱动的,因此我们这里定义一个时间的监听器对象,MySaxHandler,该类可以继承DefaultHandler类,这类似Swing中的事件监听器,这里要了解一下
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 length)
throws SAXException {
// TODO Auto-generated method stub
content=new String(ch, start, length);
}
//当解析到元素的结束标签时触发
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
//如果是标题
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 {
// TODO Auto-generated method stub
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>
XML解析之SAX解析技术案例的更多相关文章
- Dom4j解析和sax解析xml
xml基础知识 1)标签对大小写敏感,2)xml解析方式有两种dom解析和sax解析 3)常用的解析工具有dom的dom4j和sax的sax解析工具 4)文档声明中使用<?xml versio ...
- XML的概述,.Dom4解析和SAX解析
1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) html(hyper text markup langauge) XML 是一种标记语言,很类似 H ...
- XML.03-DOM和SAX解析
body,td { font-family: calibri; font-size: 10pt } XML.03-DOM和SAX解析 XML的DOM解析 解析 处理 回写 XML的SAX解析 SAX和 ...
- 经典面试题:一张表区别DOM解析和SAX解析XML
============DOM解析 vs ...
- Java SE之XML<二>XML DOM与SAX解析
[文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(D ...
- java解析XML之DOM解析和SAX解析(包含CDATA的问题)
Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...
- XML解析(二) SAX解析
XML解析之SAX解析: SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFactory.newSAXParser() 方 ...
- XML 解析---dom解析和sax解析
眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...
- DOM解析和SAX解析的区别
DOM解析和SAX解析的区别 博客分类: XML DOM SAX DOM解析和SAX解析的区别 No 区 别 DOM解析 SAX解析 1 操作 将所有文件读取到内存中形成DOM树,如果文件量过大,则 ...
- java拾遗2----XML解析(二) SAX解析
XML解析之SAX解析: SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFactory.newSAXParser() 方 ...
随机推荐
- CSS代码格式化工具
CSS代码格式化工具 http://tool.lanrentuku.com/cssformat/ 可实现CSS代码格式化和CSS在线压缩 请将CSS代码复制到下面表单中:
- Android中监听webview监听是否加载完成
之前写过一篇捕获Phoengap的webview事件的方法,主要是在实现了CordovaInterface的Activity中, 在onMessage中根据第一个参数的message name来判断 ...
- 荐 android 如何打包自定义控件(转)
荐 android 如何打包自定义控件(转) 目录[-] 方式一:将项目打包成jar包 方式二:项目作为一个library 设计自定义的控件对android开发人员来说,是家常便饭了,但是多次做项 ...
- Android - Get Bluetooth UUID for this device
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join th ...
- Mysql数据备份与恢复命令
转载:原文地址 一.备份常用操作基本命令 1.备份命令mysqldump格式 格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sq ...
- hibetnateTemplate常用方法
一.hibetnateTemplate常用方法 1.delete(Object entity) 删除指定的持久化实例在程序中一般先用 Assert.notNull和 Assert.isTrue断 ...
- Android USER 版本与ENG 版本的差异--MTK官方解释
分类: Android(4) Description]Android USER 版本与ENG 版本的差异 [Keyword]USER ENG user eng 用户版本 工程版本 差异 [Solu ...
- WEB网页输入框的默认键盘类型控制
参考资料 http://www.w3school.com.cn/html5/att_input_type.asp : 语法 <input type="value"> 属 ...
- [DNS]ACL、also-notify、视图服务器及安全设置
1. ACL :访问控制列表放在named.conf的头部,如果acl的内容太多,可以另创建一个文件,将acl放在该文件中,再在主配置文件named.conf用include 将文件加载进来(记得放在 ...
- 一、Hbase的安装
一.Hbase配置 这个是我从网上找的一个版本,网上说配置成功. 先决条件: (1)hadoop的版本与hbase的版本要对应,主要是hadoop目录下的hadoop-core-1.0.4.jar的版 ...