JavaWeb学习日记----SAX解析XML
1.SAX解析XML文档的方式:
与DOM方式解析不同,DOM方式解析是根据XML的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象。优点是可以很方便实现增删改操作。缺点是,如果文件过大,会造成内存溢出。而SAX方式解析XML是采用事件驱动,边读便解析:从上到下,一行一行的解析,解析到某一个对象时,返回对象名称。优点是不会造成内存溢出,可以很方便实现查询操作,缺点是不能实现增删改操作。
2.在使用jaxp中的sax解析器之前,需要先获得sax解析器:
1)调用SAXParserFactory.newInstanse()方法得到创建SAX解析器的工厂
2)调用工厂对象的newSAXParse()方法得到saxParse解析器对象
3) 调用解析器对象的Parser()方法解析XML文档,该方法的参数有两个,XML文档所在路径和驱动事件对象。即: parse(File f, DefaultHandler dh)
或:parse(String url, DefaultHandler dh)
需要注意的是:在解析xml文档之前,我们需要自定义一个类,这个类继承自DefaultHandler,然后重写startElement()、characters()、endElement()这三个方法。
3.有如下XML文档
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<海贼王>
<草帽海贼团>
<船长>路飞</船长>
<厨师>山治</厨师>
<航海士>娜美</航海士>
<船医>乔巴</船医>
<音乐家>布鲁克</音乐家>
<能力者>路飞</能力者>
<能力者>乔巴</能力者>
<能力者>布鲁克</能力者>
</草帽海贼团>
<草帽海贼团>
<副船长>索隆</副船长>
<考古学家>罗宾</考古学家>
<狙击手>乌索普</狙击手>
<船工>弗兰奇</船工>
<能力者>罗宾</能力者>
</草帽海贼团>
</海贼王>
需求:获得第一个<能力者>标签的内容
代码如下:
package cn.roger.Jaxp; 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; /*
* 使用Jaxp中的sax解析XML文档
*/
public class SaxTest1 {
public static void main(String[] args) throws Exception {
// 创建解析器
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
//创建事件驱动
MyHandler dh = new MyHandler();
parser.parse("src/OnePiece.xml", dh);
}
} class MyHandler extends DefaultHandler {
boolean flag = false;
int index = 0; @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("能力者")) {
flag = true;
index++;
}
} @Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (flag && index == 1) {
System.out.println(new String(ch, start, length));
flag = false;
}
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// System.out.print("</" + qName + ">");
} }
运行结果:

JavaWeb学习日记----SAX解析XML的更多相关文章
- JavaWeb学习笔记——SAX解析
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHa ...
- JavaWeb学习日记----XML基础
1.XML基础: XML全称为eXtensible Markup Language;即可扩展标记型语言,同HTML一样使用标签来操作.它的可扩展性体现在标签可以由自己定义,可以是中文标签. XML用途 ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)
今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...
- Python:使用基于事件驱动的SAX解析XML
SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- DOM&SAX解析XML
在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ...
- SAX解析xml浅析
SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序.使用SAX的优势在于其解析速度较快,占用内存较少(相对 ...
随机推荐
- TCP的三次握手过程与四次挥手
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- 深入理解Spring Redis的使用 (八)、Spring Redis实现 注解 自动缓存
项目中有些业务方法希望在有缓存的时候直接从缓存获取,不再执行方法,来提高吞吐率.而且这种情况有很多.如果为每一个方法都写一段if else的代码,导致耦合非常大,不方便后期的修改. 思来想去,决定使用 ...
- Python微信公众号开发—小白篇
本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造专栏],欢迎大家关注. github仓库地址http ...
- FFmpeg 结构体学习(七): AVIOContext 分析
在上文FFmpeg 结构体学习(六): AVCodecContext 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVIOContext. AVIOContext是FFMPEG管 ...
- [Swift]LeetCode819. 最常见的单词 | Most Common Word
Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...
- [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras
Given a binary tree, we install cameras on the nodes of the tree. Each camera at a node can monitor ...
- 面向对象-Java MOOC翁恺老师第一次作业
由于看这个慕课的时候已经结课了,没有办法提交查看代码是否正确...先保存一下,以后再提交改错 欢迎批评指正! 题目链接:https://www.icourse163.org/learn/ZJU-100 ...
- CentOS Too Many Open Files 解决
问题 在使用 WRK 对应用服务进行压测的时候,提示 "too many open files" 信息,导致无法启动测试. 原因 CentOS 7.x 默认的打开文件数目限制为 1 ...
- 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 2.Programming assignments:Trigger word detection
Expected OutputTrigger Word Detection Welcome to the final programming assignment of this specializa ...
- Unix程序员的Win10二三事
macOS延续自BSD Unix, Linux则是从内核开始重新编写但延续Unix使用方式的Unix.所以mac还有linux程序员,一般都算是*nix程序员,尽管其中还有不少的区别. Windows ...