由于dom采用的是将xml文档加载入内存进行处理的方式,如果xml文档较大,则会导致加载时间过长,效率降低的情况,因此,sun公司在JAXP中又添加了对SAX的支持;

SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。

SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分“解析器”和“事件处理器”:

  • 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
  • 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
  • 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理.
public class SAX_xml {
public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException
{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File("src/package1112/books.xml"), new DefaultHandler(){});
}
}

这段代码为一个主类,主类里面只有一个主函数。

主函数整体看见就三条语句:

第一句:声明一个工厂

第二句:声明一个解析器

第三句:解析xml文档(内含两个参数,第一个是要解析的xml文档,第二个是)

第三句展开

第一个函数:

public void startDocument() throws SAXException
{
System.out.println("文档开始读取……");
}

第二个函数:(输出起始标签,该标签的键值对(属性名:属性值))

public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException
{
System.out.println("<"+qName+">");
for(int i=0;i<attributes.getLength();i++)
{
System.out.println(attributes.getQName(i)+":"+attributes.getValue(i));
}
}

第三个函数:(输出节点的文本内容)

public void characters(char[] ch,int start,int length) throws SAXException
{
System.out.println(new String(ch,start,length));
}

第四个函数:(输出结束标签)

public void endElement(String uri,String localName,String qName) throws SAXException
{
System.out.println("<"+qName+">");
}

第五个函数:(解析结束)

public void endDocument() throws SAXException
{
System.out.println("文档结束了");
}

完整代码:

package com.sy;
import java.io.File;
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 SAX_xml {
public static void main(String[] args) throws Exception, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File("books.xml"), new DefaultHandler(){
@Override
public void startDocument() throws SAXException {
System.out.println("文档开始读取了……");
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
System.out.println("<"+qName+">");
for(int i=0;i<attributes.getLength();i++){
System.out.println(attributes.getQName(i) + ":"
+ attributes.getValue(i));
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch, start, length));
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("<"+qName+">");
}
@Override
public void endDocument() throws SAXException {
System.out.println("文档结束了……");
}

});
}
}

补充:

  1. 快捷键完成五个重载函数:alt+/ 输入要是用的函数的函数名的前两个字母(函数体需要重写)
  2. 给方法加注释:shift+alt+/
  3. 给类加注释:shift+alt+j
  4. 部分代码封装为函数:ctrl+alt+m
  5. 查看类的子类(继承关系):选中类名,Ctrl+t
  6. 查看类所在包:点击类名,相应导包语句背景色改变
  7. main函数生成快捷键:main alt+/
  8. 导包:ctrl+shift
  9. builder编译
  10. has_是否拥有
  11. 加载本地目录(清空列表):dshift选中所有项目,右键,delete
  12. map

xml文档读取-SAX的更多相关文章

  1. 2.2 使用 JAXP 对XML文档进行SAX解析

    使用JAXP 对 XML文档进行 SAX解析: public class Demo1 { /** * 使用JAXP对XML文档进行SAX解析 * @throws Exception * @throws ...

  2. javaweb学习总结十二(JAXP对XML文档进行SAX解析)

    一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ...

  3. Java高级特性 第14节 解析XML文档(2) - SAX 技术

    一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...

  4. XML文档读取-DOM4j

    JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J. Dom4j是一个简单.灵活的开放源代码的库.Dom4j是 ...

  5. XML文档读取-DOM

    DOM(Document Object Model),“文档对象模型”早期是为了解决不用浏览器间数据兼容问题提出的解决方案,现在已经是W3C组织推荐的处理可扩展标志语言的标准编程接口. W3C DOM ...

  6. DOM和SAX是应用中操纵XML文档的差别

    查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下:          DOM.即Do ...

  7. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  8. Java高级特性 第15节 解析XML文档(3) - JDOM和DOM4J技术

    一.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. Jdom由6个包构成: Element类表示XML文档的元素 org.jdom: 解析xml ...

  9. sax解析案例(javabean封装xml文档数据)

    package itcast.sax; import java.io.IOException; import java.util.List; import javax.xml.parsers.Pars ...

随机推荐

  1. scrapy爬虫框架之理解篇(个人理解)

    提问: 为什么使用scrapy框架来写爬虫 ?            在python爬虫中:requests  +  selenium  可以解决目前90%的爬虫需求,难道scrapy 是解决剩下的1 ...

  2. 利用Python循环(包括while&for)各种打印九九乘法表

    一.for循环打印九九乘法表 #注意:由于缩进在浏览器不好控制,请大家见谅,后续会有图片传入. 1.1 左下角 for i in range(1,10): for j in range(1,i+1): ...

  3. 如何部署Java_web项目到云服务器上

    步骤 1:购买 Linux 实例(略) 步骤2:安装JDK 本节介绍如何安装java jdk. 软件包中包含的软件及版本如下: Tomcat:1.8.0_121 说明:这是写文档时参考的软件版本.您下 ...

  4. 机器学习,安装python的支持包

    windows10,64位: 以下命令行安装均在python目录下,对应的whl文件也被我拷贝到python目录下: http://www.lfd.uci.edu/~gohlke/pythonlibs ...

  5. yaml在python中的应用简单整理

    #简单介绍============================================================== YAML使用寄主语言的数据类型,这在多种语言中流传的时候可能会引 ...

  6. Liunx文件解压与压缩

    文件压缩和解压缩 常见压缩格式如下 .zip .gz .bz2 .tar.gz .tar.gz2 .zip压缩 zip 压缩文件名 源文件 压缩文件 zip -r(递归) 压缩文件名 源目录 压缩目录 ...

  7. Android Weekly Notes Issue #284

    November 19th, 2017 Android Weekly Issue #284 本期内容丰富.有趣的有如何搭建真机测试平台,Proguard里面各类keep的区别,如何运行时获得泛型类型, ...

  8. Spring4 JDBC详解

    Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...

  9. Gitlab自动触发Jenkins构建打包

    一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...

  10. 条件随机场 Conditional Random Fields

    简介 假设你有冠西哥一天生活中的照片(这些照片是按时间排好序的),然后你很无聊的想给每张照片打标签(Tag),比如这张是冠西哥在吃饭,那张是冠西哥在睡觉,那么你该怎么做呢? 一种方法是不管这些照片的序 ...