SAX方式解析XML文档
一、SAX (Simple API for XML)
SAX解析方式是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
优点: 无需将整个文档加载到内存中, 所以内存消耗少的 ,适合解析特别大的 XML文件。
二、步骤
创建解析工厂:通过 SAXParaserFactory.newInstance()方法获取
创建解析器:通过newSAXParser()获取
执行 parser 方法,传入两个参数:XML文件路径、事件处理器
创建一个类,继承 DefaultHander 类 ,重写三个方法 :
startElement(String uri, String localName, String qName, Attributes attributes):获取开始标签
qName :把 开始 标签名称返回
attributes :返回标签中的属性对象
characters(char[] ch, int start, int length):获取标签文本内容
endElement(String uri, String localName, String qName):获取结束标签
三、实现代码
1、XML文档
<?xml version="1.0" encoding="UTF-8"?> <!-- 第一句为固定的声明语句 -->
<person> <!--开始标签,可任意定义,但要有对应的结束标签--><!-- person也是根节点 --><p1> <!-- person的一个子节点 --><name address="beijing">zhangsan</name><age>20</age></p1><p1><name>wangwu</name><age>29</age></p1>
</person> <!--结束标签,与开始标签对应-->
2、SAX方式解析XML文档的Java代码
package com.hdl.Saxparser;
import java.io.IOException;
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;
public class MySAXParserTest {
public static void main(String[] args) {try {// 1、创建SAX解析器工厂SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();// 2、创建SAX解析器SAXParser saxParser = saxParserFactory.newSAXParser();// 3、执行parser方法saxParser.parse("conf/persons.xml", new MyHandler());} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
}
class MyHandler extends DefaultHandler{
/* (non-Javadoc)* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);System.out.print("<" + qName + ">");
}/* (non-Javadoc)* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);System.out.print(new String(ch, start, length));
}/* (non-Javadoc)* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {super.endElement(uri, localName, qName);System.out.print("<" + qName + ">");
}
}
3、解析结果
SAX方式解析XML文档相关推荐
- JavaXml教程(五)使用SAX方式解析XML文件
Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...
- XML文档定义有几种方式?它们之间有何本质区别?解析XML文档有哪几种方式?
XML文档定义方式:有两种定义形式,dtd文档类型定义和schema模式 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的) 普通区别: 1.s ...
- XML文档定义有几种形式?解析XML文档有哪几种方式?
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上 ...
- XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束.其本质区别在于Schema本身也是一个XML文 ...
- Java 使用SAX解析XML文档
DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...
- XML 解析XML文档 XML约束
XML 什么是XML Extensible Markup Language(可扩展的标记语言) 他是一个语言,有自己的语法,和Java以及其他的编程无关 "标记" 在文件中包含类似 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...
- xml教程之java解析xml文档
1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...
- 大杂烩 -- 四种生成和解析XML文档的方法详解
基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...
最新文章
- 看完 50000 张专辑封面后,AI 设计师疯狂输出
- Android模拟器访问pc与网络的问题
- 一些与oracle相关的关于查询锁的信息
- php简单分页,php简单实现分页查询的方法
- npm ERR! Failed at the node-sass@4.13.0 postinstall script.
- 13 MM配置-主数据-定义物料状态
- java的网络功能与编程_Java的网络功能与编程(转载)
- Service startService方式的服务
- matlab频分复用,基于MATLAB的频分复用系统的仿真_.doc
- gperftools
- linux终端快捷方式
- 程序员应该学会自我学习
- sql-labs超详细教程
- 关于AIDL接口定义中oneway的修饰符源码解析.
- 20180418小测
- 2.6顺序表和链表的优缺点(区别、特点)详解
- 深入理解机器学习中的:目标函数,损失函数和代价函数
- 《论文笔记》—— Self-supervised Image-specific Prototype Exploration for Weakly Supervised Semantic Segment
- 记某环境SqlServer异地备份的坑(Server权限管控贼拉严格)
- 英语音标怎么发音 48个英语音标正确读法
热门文章
- Codeforces Round #288 (Div. 2)E. Arthur and Brackets
- 如何判断Intent有没有对应的Activity去处理?
- scrapy分布式调度源码及其实现过程
- Android 中进程的级别以及 Service 的优先级
- 10.23T1 杨辉三角
- 面向实时嵌入式系统的图形用户界面支持系统――MiniGUI 背景,发展及优势
- 11.企业安全建设入门(基于开源软件打造企业网络安全) --- 办公网数据防泄漏
- 8. Sphinx 站内搜索
- 59. 预定义超全局变量
- 37. 错误与异常处理(1)