--------------------------------------------XML之SAX解析XML------------------------------------------
一,前言
SAX是针对DOM解析XML内存占用大,查找速度慢的缺点而出现的解决方案。SAX解析器对XML文档解析会从XML文档开始位置起进行解析,同时根据已经定义好的事件处理器,来解决当前所解析的部分(元素、属性或是元素的内容)是否有必要记录并存储。下面首先看看一个使用SAX解析数据的程序,代码如下。
1,SaxXML.java
package com.test;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxXML {
public static void main(String[] args) {
//创建解析的XML 文档对象
File xmlFile=new File("music.xml");
//创建一个SAXParserFactory 对象 ,通过单例模式创建
SAXParserFactory factory=SAXParserFactory.newInstance();
try {
//创建SAXParser 对象
SAXParser parser=factory.newSAXParser();
// 解析文件,定义解析时的事件处理
parser.parse(xmlFile, new MySaxHandler());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
2,MySaxHandler.java
package com.test;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MySaxHandler extends DefaultHandler {
static DateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化内容
private String content;
/*
* 事件发生时元素中的字符
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@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("name".equals(qName)){
System.out.println("歌名:"+content);
}else if("author".equals(qName)){
System.out.println("歌手:"+content);
}else if("county".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("music".equals(qName)){
System.out.println("\r\n找到一首歌.所属分类:"+attributes.getValue("category")+".");
}
}
}
3,music.xml
<?xml version="1.0" encoding="UTF-8"?>
<musics>
<music category="摇滚">
<name>江南style</name>
<author>PSY</author>
<county>韩国</county>
<date>20121205</date>
</music>
<music category="摇滚">
<name>航母style</name>
<author>网民</author>
<county>中国</county>
<date>20121205</date>
</music>
</musics>
4,附图
程序运行后的效果与DOM解析的效果完全相同。两种方式虽然都达到了同样的目的,但其底层的实现却是完全不同的,通过以上的程序,可以总结出使用SAX解析时,需要注意的问题:
(1),首先要通过以下三个步骤解析XML文件。
//创建一个SAXParserFactory 对象 ,通过单例模式创建
SAXParserFactory factory=SAXParserFactory.newInstance();
//创建SAXParser 对象
SAXParser parser=factory.newSAXParser();
// 解析文件,定义解析时的事件处理
parser.parse(xmlFile, new MySaxHandler());
(2),在解析XML数据时,要创建一个解析时的监听器对象,这里通过继承DefaultHandle类。
DefaultHandle的常用方法:
1,void characters(char[] ch, int start, int length);收到元素中字符数据的通知。
2,voidendElement() ||endElement(String uri, String localName, String qName);收到元素结束的通知。
3,voidstartElement() ||startElement(String uri,
String localName, String qName, Attributes attributes);收到文档开始的通知。
分享到:
相关推荐
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
使用SAX方式解析XML SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件...
sax解析xml实例
Dom,Sax,Xpath解析XML实例,有源码,实例。简单易用,直接可用
NULL 博文链接:https://mazhihui.iteye.com/blog/1535280
<?xml version="1.0" encoding="utf-8"?> <users> <user id="A001"> <name>zhaoyun</name> <age>40</age> </user> <user id="b001"> <name>Liubie</name> <age>25</age> </user> </users>
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
java读取RSS-SAX解析XML的实例,java语言编写,使用时只需要在main方法中将参数换成自己的RSS地址即可。
dom,dom4j,sax解析xml 文件经典实例,内置详细注解
JAVA100例之实例69 JAVA使用SAX解析XML
java解析xml实例 java解析xml实例 java解析xml实例
SAX解析xml文件并显示在android虚拟机上实例源码,可以学习一下SAX解析技术
使用sax解析xml,有详细的解析及源代码实例
读取和解析xml文件
android用sax解析xml文件实例源码
本文实例讲述了Python3基于sax解析xml操作。分享给大家供大家参考,具体如下: python使用SAX解析xml SAX是一种基于事件驱动的API。 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。 解析器负责读取XML文档,...
xml为安卓工程(采用SAX解析xml),test.xml为xml实例,可以部署到你的web工程下载下来。