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>[email protected]</email>
<date>2016-05-20</date>
</article>
<article category="JavaWeb">
<title>JavaWeb学习笔记</title>
<author>Jasxu</author>
<email>[email protected]</email>
<date>2016-05-21</date>
</article>
</articles>

时间: 2024-10-11 13:35:34

XML解析之SAX解析技术案例的相关文章

JavaWeb-05 XML基础(Dom解析和Sax解析)

JavaWeb-05 JavaWeb-XML基础(Dom解析和Sax解析) 一.XML的概述(了解) eXtensible Markup Language 可扩展标记语言 宗旨是传输数据,而非显示数据. XML标签没有被预定义,需要用户自行定义标签. XML技术是W3C组织(WorldWideWeConsortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范. 作用: a. 传输数据 b. 配置文件(主要用途) XML技术用于解决什么问题? a. XML语言出现

XML.03-DOM和SAX解析

body,td { font-family: calibri; font-size: 10pt } XML.03-DOM和SAX解析 XML的DOM解析 解析 处理 回写 XML的SAX解析 SAX和DOM方式的不同: SAX解析原理 SAX解析范例 解析xml常用的有两种方式,DMO和SAX DOM和SAX的区别: DOM: 在内存中生成树桩结构 优点是可以支持增删改查各种操作 缺点在于,如果文档过大的时候,可能会产生内存溢出的风险 SAX: 基于事件驱动,边读边解析 优点:占用内存小 缺点,

XML 解析---dom解析和sax解析

目前XML解析的方法主要用两种: 1.dom解析:(Document Object Model,即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML文档加载到内存中,生成该XML文档对应的document对象,然后把XML文档中的各个标签元素变成相应的Element对象,文本会变成Text对象,属性会变成Attribute对象,并按这些标签.文本.属性在XML文档中的关系保存这些对象的关系. 缺点:消耗内存,所以使用dom解析XML文档时不能解

非常简单的XML解析(SAX解析、pull解析)

这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 1 package com.example.demo.service; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import javax.xml.parsers.DocumentBuilder; 7 import javax.xml.parsers.DocumentBuilderFactory; 8 import javax.xml.parse

XML解析(二) SAX解析

XML解析之SAX解析: SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFactory.newSAXParser() 方法获得. 注意SAXParser的parse()方法: parse(String uri, DefaultHandler dh),parse(File f, DefaultHandler dh)等都需要传递一个DefaultHandler的对象. 查看API帮助手册可知,SAX解析是事件驱动的,De

Java学习总结(21)——XML文档解析:DOM解析,SAX解析

一.XML简介1.可扩展性标记语言(eXtensible Markup Language)2.XML用于描述数据3.应用场合:(1)持久化存储数据(2)数据交换(3)数据配置4.XML语法(1)文档类型:在编写XML文档时,需要先使用文档声明,声明XML文档的类型.最简单的声明语法:<?Xml version="1.0" ?>用encoding属性说明文档的字符编码:<?Xml version="1.0" encoding="GB2312

Java SE之XML&lt;二&gt;XML DOM与SAX解析

[文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(Document Object Model): 特点:树状解析 优点:[更适合对XML文档的(crud)操作.]对XML文档增删改查操作很方便灵活 缺点:内存消耗很大,不适合数据量很大,节点很多的XML文档. SAX(Simple API for XML): 特点:自上往下顺序解析 优点:[占用内存小,解析速度

java解析XML① 之DOM解析和SAX解析(包含CDATA的问题)

Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电影院看电影一样,从头到尾看一遍,不能回退(Dom可来来回回读取),在看电影的过程中,每遇到一个情节,都会调用大脑去接收处理这些信息.SAX也是相同的原理,每遇到一个元素节点,都会调用相应的方法来处理.在SAX的解析过程中,读取到文档开头.文档结尾,元素的开头和元素结尾都会调用相应方法,我们可以在这些

DOM解析和SAX解析的对比

SAX & DOM 解析对比 SAX 解析特点 只读 从上向下 速度快 解析的时候相对比较繁琐,有5个代理方法,每个代理方法都要写一定代码 适合大的 XML 文件解析 在计算机领域,针对 XML 解析,还有 DOM 解析方式,在 PC 端和服务器端被广泛使用 背景 主要用在 PC 端或者服务器端 苹果提供了 NSXML 类支持 DOM 方式的解析 不过 NSXML 类只能用在 MAC 开发,在 iOS 中无法直接使用 DOM 特点 DOM 方式不仅能解析 XML 文档,还能够修改: 增加节点/删

dom解析和sax解析的区别

dom 和 sax 解析方法的区别 1,dom解析的优点是对文档crud比较方便,缺点是占用内存较多2,sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud 解析方式1 dom是将整个文档加载进内存,所以内存消耗会很大,当文档的太大时,不适合用Dom  dom文档加载进内存后作为一个Document对象,把每个节点当作一个Element对象,如果该元素有内容,就将该内容作为一个Text对象,所以dom对文档的crud很方便2 sax是一行一行的解析,并且不能