DOM,即Document Object Model,中文叫文档对象模型。DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的、用于内存存储和操作层次化文档的模型。当按 照DOM模型解析XML文档时,就会在内存中构造一个对应的DOM树,它可以用于不同节点之间的遍历。然而,在遍历之前必须先完成DOM树的构造。因此, 在处理规模较大的XML文档时就很耗内存,占用资源较多。尤其是只需要操作文档中一小部分时效率很低。

SAX,即Simple API for XML的简称,中文叫XML简单应用程序接口。它是一个事实上的标准。与DOM不同的是,它是用事件驱动模型。解析XMl文档时每遇到一个开始或者结束标 签、或者属性、或者一条指令时,程序就产生一个事件来进行相应的处理。所以在操作文档之前不需要对整个文档进行解析。实际上,文档的各个部分可以在进行解 析的同时进行操作。因此,SAX相对于DOM来说更适合操作大文档。

下面介绍一下SAX解析XML文档的方法:

1.通过SAXParserFactory的静态newInstance()方法获取SAXParserFactory实例

SAXParserFactory factory = SAXParserFactory.newInstance();

2.通过SAXPareserFactory实例的newSAXParser()方法返回SAXParser实例

SAXParser parser = factory.newSAXParser();

3.创建一个类继承DefaultHandler,重写其中的一些方法来处理业务,并创建这个类的实例

4.调用parse()方法进行解析

File f = new File("book.xml");
parser.parse(f, sdh);

下面还是直接上例子吧。

xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<bookstore><book id="1"><name>111</name><author>222</author></book><book id="2"><name>333</name><author>444</author></book>
</bookstore>

具体实现

SAXxml.java

package com.lpp.test;
import java.io.File;
import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import com.lpp.handler.SAXHeadler;public class SAXxml
{public static void main(String[] args) {// TODO Auto-generated method stubSAXParserFactory factory = SAXParserFactory.newInstance();try{SAXParser parser = factory.newSAXParser();SAXHeadler sdh=new SAXHeadler();File f = new File("book.xml"); parser.parse(f, sdh);} catch (ParserConfigurationException | SAXException | IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}
}

SAXHandler.java

package com.lpp.handler;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;public class SAXHeadler extends DefaultHandler
{@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);System.out.println("开始解析"+qName);if(qName.equals("book")){String value = attributes.getValue("id");System.out.println("id:"+value);System.out.println();}else if(qName.equals("bookstore")){System.out.println();}else if(!qName.equals("book")&&!qName.equals("bookstore")){System.out.println("节点名:"+qName);}//  System.out.println();}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException{// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);        System.out.println("结束解析"+qName);System.out.println();}@Overridepublic void startDocument() throws SAXException{// TODO Auto-generated method stubsuper.startDocument();System.out.println("开始解析xml文档");System.out.println();}@Overridepublic void endDocument() throws SAXException{// TODO Auto-generated method stubsuper.endDocument();System.out.println("结束解析xml文档");System.out.println();}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException{// TODO Auto-generated method stubsuper.characters(ch, start, length);String chs=new String(ch, start, length);if(!chs.trim().equals("")){System.out.println("节点值:"+chs);}}
}

注意
xml文档中会有空白的节点值,所以在重写characters()方法时,加上了判断条件。String chs=new String(ch, start, length); if(!chs.trim().equals("")),
判断节点值不为空时才进行输出操作。

转载于:https://www.cnblogs.com/lpl1/p/7337072.html

Java 使用SAX解析XML文档相关推荐

  1. JAVA SAX解析XML文档

    SAX SAX(simple API for XML)是一种XML解析的方法,相比于DOM,SAX的解析更有效更快. 解析步骤 ①获取解析工厂 ②从解析工厂获取解析容器 ③编写处理器 ④加载Docum ...

  2. SAX解析XML文档——(二)

    SAX从上向下解析,一行一行解析.节省内存,不适合CRUD. XML文档: <?xml version="1.0" encoding="UTF-8"?&g ...

  3. cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)

    今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风... 恩,听着歌写文档生活就是这么享受. 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊..这还要从前前前几天说起,那 ...

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

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

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

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

  6. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  7. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  8. java中sax的使用_java使用sax对xml文档的解析

    随着互联网技术的发展,XML技术变得越来越重要,从而出现了很多 与XML的整合应用方面的技术,SAX就是其中之一.在这里,我就简要 谈谈java怎样使用sax对xml文档的解析. 首先,让我们来谈谈S ...

  9. JAVA中利用DOM解析XML文档

    JAVA中利用DOM解析XML文档 package org.sws.utils; import java.io.File;import java.io.IOException; import java ...

最新文章

  1. PDF数据提取------1.介绍
  2. 现在,Serverless 真的已经成熟了吗?
  3. 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
  4. 不等双十一,ChemDraw降价活动已经打开!
  5. NOIP模拟测试28「阴阳·虎·山洞」
  6. python wxpython_python GUI wxPython
  7. LeetCode:999. 车的可用捕获量
  8. 稀疏矩阵建立十字链表c语言,实验6-稀疏矩阵十字链表的存储.doc
  9. 配置JAVA和配置Android -sdk步骤
  10. SpacePack 运维工具之 Auto fdisk
  11. 2020年CISP线下考试逐渐恢复啦
  12. delphi pi怎么得到?
  13. python多线程求合数个数_求十亿内所有质数的和,怎么做最快?
  14. 谁会成为今年的Best CIO人选
  15. 深度学习GPU显卡的浮点计算性能指标分析
  16. homeassistant搭建_智能家居 篇二:Home Assistant简易智能家居环境搭建
  17. vulnhub:Who Wants To Be King: 1
  18. python 三维曲线拟合_python实现三维拟合的方法
  19. Windows脚本初探之VBScrip的MsgBox函数
  20. [转]优秀的计算机编程类博客 和 文章

热门文章

  1. 谷歌推出 Kotlin 免费在线课程
  2. Bare HTTP不完全是RESTful
  3. JavaScript 九种跨域方式实现原理 1
  4. python与专业相结合应用案例_Office高级应用与Python综合案例教程(普通高等教育十三五规划教材)...
  5. oracle grid安装看不到config,【图片】【rac11g安装问题】出了问题特来请教各位大侠【oracle吧】_百度贴吧...
  6. python apache_Windows 配置 Apache Python CGI
  7. c语言中open函数r,C语言中open函数
  8. python布尔运算可以比较浮点数吗_Python3 基础之:令人困惑的浮点数运算
  9. 聚类算法 距离矩阵_机器学习基础-层次聚类
  10. 面包板如何接线电源 图解_互感器、电能表接线和原理讲解