JAVA解析XML之SAX方式
JAVA解析XML之SAX方式
SAX解析xml步骤
通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle
重写DefaultHandle类的方法
startElement方法用来遍历xml文件的开始标签;
endElement方法用来遍历xml文件的结束标签;
startDocument方法用来标识解析开始;
endDocument方法用来标识解析结束。
characters方法用来获取text
其中:参数qName 遍历到的元素的名称
且同样会出现空白和换行的问题
下面直接上代码
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>JAVA编程思想</name>
<anthor>****</anthor>
<year>2000</year>
</book>
<book id="2">
<name>疯狂JAVA系列</name>
<anthor>李刚</anthor>
<price>89</price>
</book>
</bookstore>
books.xml
package pers.zww.xml.handler; import javax.xml.stream.events.StartElement; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class SAXParserHandler extends DefaultHandler{
int bookIndex=0;
/*
* 解析XML元素
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//开始解析book元素的属性 if (qName.equals("book")) {
bookIndex++;
System.out.println("开始遍历第"+bookIndex+"本书"); // //已知book元素下的属性名称,根据属性名称获取属性值
// String value=attributes.getValue("id");
// System.out.println("book的属性值:"+value);
//未知book元素下的属性名称及个数
int num=attributes.getLength();
for (int i = 0; i < num; i++) {
System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));
System.out.println(" && 属性值:"+attributes.getValue(i)); }
}else if(!qName.equals("book")&&!qName.equals("bookstore")){
System.out.print("节点名:"+qName); }else { }
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String val=new String(ch, start, length);
if (!val.trim().equals("")) {
System.out.println(" && 节点值:"+val);
}
} /*
* 用来遍历xml文件的结束标签
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
//是否针对一本书已经遍历结束
if (qName.equals("book")) {
System.out.println("=======================");
}
} /*
* 用来标志解析开始
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
//第一行开始
System.out.println("SAX解析开始");
} /*
* 用来标志解析结束
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
//最后一行结束
System.out.println("SAX解析结束");
}
}
SAXParserHandler.java
SAX与DOM对比
DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;
SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).
参考资料
慕课网JessicaJiang老师视频教程点击链接
JAVA解析XML之SAX方式的更多相关文章
- JAVA解析XML之DOM方式
JAVA解析XML之DOM方式 准备工作 创建DocumentBuilderFactory对象; 创建DocumentBuilder对象; 通过DocumentBuilder对象的parse方法 ...
- Java解析XML文件的方式
在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...
- java解析XML几种方式
第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序 ...
- python 解析xml 文件: SAX方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
- [转载] python 解析xml 文件: SAX方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- java解析xml的几种方式
java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
随机推荐
- Codeforces 912E Prime Gift(预处理 + 双指针 + 二分答案)
题目链接 Prime Gift 题意 给定一个素数集合,求第k小的数,满足这个数的所有质因子集合为给定的集合的子集. 保证答案不超过$10^{18}$ 考虑二分答案. 根据折半的思想,首先我们把这个 ...
- 网站优化—MySQL优化
MySQL优化 简介 由于页面静态化技术可以实现对动态数据的缓存,但是有的时候还是需要去请求数据库.所以对数据库的优化也是不可缺少的. 优化思路 设计:存储引擎,字段,范式 自身:索引,自身的缓存 架 ...
- springboot集成PageHelper,支持springboot2.0以上版本
第一步:pom文件还是需要引入依赖 <!--mybatis的分页插件--> <dependency> <groupId>com.github.pagehelper& ...
- Oracle 检查表空间使用情况
--检查表空间使用情况 SELECT f.tablespace_name , a.total "total (M)" , f.free "fre ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- SparkStreaming和Drools结合的HelloWord版
关于sparkStreaming的测试Drools框架结合版 package com.dinpay.bdp.rcp.service; import java.math.BigDecimal; impo ...
- perl的几个小tips
1.字符串比较 if($str eq "hello"){ ... } 字符串比较必须用eq,用==只适合标量 2.字符串连接 $str3=$str1."-".$ ...
- 微信小程序 - 关闭当前页面无法再通过左上角返回
考试的时候不可能答完以后,得到成绩后再通过左上角返回再重新答吧? 可以通过:open-type='redirectTo'实现
- C#遍历指定路径下的目录
通过指定路径訪问路径下的文件.在C#的开发中主要利用了Directory类和DirectoryInfo类,简要介绍Directory类中的成员:命名空间 System.IO 命名空间 1.Create ...
- fiddler不能监听 localhost和 127.0.0.1的问题 .
localhost/127.0.0.1的请求不会通过任何代理发送,fiddler也就无法截获. 解决方案 用 http://localhost. (locahost紧跟一个点号) 用 http://1 ...