一、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文档相关推荐

  1. JavaXml教程(五)使用SAX方式解析XML文件

    Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...

  2. XML文档定义有几种方式?它们之间有何本质区别?解析XML文档有哪几种方式?

    XML文档定义方式:有两种定义形式,dtd文档类型定义和schema模式 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的) 普通区别: 1.s ...

  3. XML文档定义有几种形式?解析XML文档有哪几种方式?

    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上 ...

  4. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束.其本质区别在于Schema本身也是一个XML文 ...

  5. Java 使用SAX解析XML文档

    DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...

  6. XML 解析XML文档 XML约束

    XML 什么是XML Extensible Markup Language(可扩展的标记语言) 他是一个语言,有自己的语法,和Java以及其他的编程无关 "标记" 在文件中包含类似 ...

  7. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  9. xml教程之java解析xml文档

    1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...

  10. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

最新文章

  1. 看完 50000 张专辑封面后,AI 设计师疯狂输出
  2. Android模拟器访问pc与网络的问题
  3. 一些与oracle相关的关于查询锁的信息
  4. php简单分页,php简单实现分页查询的方法
  5. npm ERR! Failed at the node-sass@4.13.0 postinstall script.
  6. 13 MM配置-主数据-定义物料状态
  7. java的网络功能与编程_Java的网络功能与编程(转载)
  8. Service startService方式的服务
  9. matlab频分复用,基于MATLAB的频分复用系统的仿真_.doc
  10. gperftools
  11. linux终端快捷方式
  12. 程序员应该学会自我学习
  13. sql-labs超详细教程
  14. 关于AIDL接口定义中oneway的修饰符源码解析.
  15. 20180418小测
  16. 2.6顺序表和链表的优缺点(区别、特点)详解
  17. 深入理解机器学习中的:目标函数,损失函数和代价函数
  18. 《论文笔记》—— Self-supervised Image-specific Prototype Exploration for Weakly Supervised Semantic Segment
  19. 记某环境SqlServer异地备份的坑(Server权限管控贼拉严格)
  20. 英语音标怎么发音 48个英语音标正确读法

热门文章

  1. Codeforces Round #288 (Div. 2)E. Arthur and Brackets
  2. 如何判断Intent有没有对应的Activity去处理?
  3. scrapy分布式调度源码及其实现过程
  4. Android 中进程的级别以及 Service 的优先级
  5. 10.23T1 杨辉三角
  6. 面向实时嵌入式系统的图形用户界面支持系统――MiniGUI 背景,发展及优势
  7. 11.企业安全建设入门(基于开源软件打造企业网络安全) --- 办公网数据防泄漏
  8. 8. Sphinx 站内搜索
  9. 59. 预定义超全局变量
  10. 37. 错误与异常处理(1)