Java 使用SAX解析XML文档
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文档相关推荐
- JAVA SAX解析XML文档
SAX SAX(simple API for XML)是一种XML解析的方法,相比于DOM,SAX的解析更有效更快. 解析步骤 ①获取解析工厂 ②从解析工厂获取解析容器 ③编写处理器 ④加载Docum ...
- SAX解析XML文档——(二)
SAX从上向下解析,一行一行解析.节省内存,不适合CRUD. XML文档: <?xml version="1.0" encoding="UTF-8"?&g ...
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风... 恩,听着歌写文档生活就是这么享受. 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊..这还要从前前前几天说起,那 ...
- 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包 ...
- Dom4j 解析Xml文档及 XPath查询 学习笔记
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- java中sax的使用_java使用sax对xml文档的解析
随着互联网技术的发展,XML技术变得越来越重要,从而出现了很多 与XML的整合应用方面的技术,SAX就是其中之一.在这里,我就简要 谈谈java怎样使用sax对xml文档的解析. 首先,让我们来谈谈S ...
- JAVA中利用DOM解析XML文档
JAVA中利用DOM解析XML文档 package org.sws.utils; import java.io.File;import java.io.IOException; import java ...
最新文章
- PDF数据提取------1.介绍
- 现在,Serverless 真的已经成熟了吗?
- 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
- 不等双十一,ChemDraw降价活动已经打开!
- NOIP模拟测试28「阴阳·虎·山洞」
- python wxpython_python GUI wxPython
- LeetCode:999. 车的可用捕获量
- 稀疏矩阵建立十字链表c语言,实验6-稀疏矩阵十字链表的存储.doc
- 配置JAVA和配置Android -sdk步骤
- SpacePack 运维工具之 Auto fdisk
- 2020年CISP线下考试逐渐恢复啦
- delphi pi怎么得到?
- python多线程求合数个数_求十亿内所有质数的和,怎么做最快?
- 谁会成为今年的Best CIO人选
- 深度学习GPU显卡的浮点计算性能指标分析
- homeassistant搭建_智能家居 篇二:Home Assistant简易智能家居环境搭建
- vulnhub:Who Wants To Be King: 1
- python 三维曲线拟合_python实现三维拟合的方法
- Windows脚本初探之VBScrip的MsgBox函数
- [转]优秀的计算机编程类博客 和 文章
热门文章
- 谷歌推出 Kotlin 免费在线课程
- Bare HTTP不完全是RESTful
- JavaScript 九种跨域方式实现原理 1
- python与专业相结合应用案例_Office高级应用与Python综合案例教程(普通高等教育十三五规划教材)...
- oracle grid安装看不到config,【图片】【rac11g安装问题】出了问题特来请教各位大侠【oracle吧】_百度贴吧...
- python apache_Windows 配置 Apache Python CGI
- c语言中open函数r,C语言中open函数
- python布尔运算可以比较浮点数吗_Python3 基础之:令人困惑的浮点数运算
- 聚类算法 距离矩阵_机器学习基础-层次聚类
- 面包板如何接线电源 图解_互感器、电能表接线和原理讲解