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的优势在于其解析速度较快,占用内存较少(相对 ...
随机推荐
- Servlet 监听器Listner
定义: 专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动. Servlet 规范为每种事件监听器都定义了相应的接口,它用于监听 ...
- Unity AssetBundle的几个加载方式
string path = @"AssetBundles/scene/cubewall.ab"; string cacheDownloadPath = @"file:// ...
- docker 及 docker-compose 的快速安装和简单使用
本篇将使用 DaoCloud 源在 Ubuntu 上简单快速安装 docker 及 docker-compose 并添加了通过 Dockerfile 及 docker-compose.yml 使用 n ...
- [Swift]LeetCode473. 火柴拼正方形 | Matchsticks to Square
Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...
- Redis 设计与实现 (九)--Lua
EVAL script numkeys key [key ...] arg [arg ...] script: 你的lua脚本 numkeys: key的个数 key: ...
- Android开发:修改eclipse里的Android虚拟机路径
一.发现问题: 今天打开电脑发现C盘缩了不少,这才意识到:eclipse里配置的安卓虚拟机默认放在了C盘里. 当然,在不同的电脑上可能路径有所不同,我的默认路径是:C:\Users\lenovo\.a ...
- spring boot -spring data-redis
//添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 11.Git分支-远程跟踪分支的概念、多个远程仓库的使用
1.远程跟踪分支的概念 远程引用是对远程仓库的引用,包括分支.标签等等. 1.可以通过 git ls-remote <remote> 来获得远程引用的完整列表 2.git remote ...
- Python -- socket 实现服务器之间的通信
现在需要做一个分布式课程设计(简单小游戏),三个人小组合作完成. 我需要设计一个登录注册服务器,接收来自网关服务器(消息中间件)的用户登录注册消息请求,然后生成访问数据库服务器的消息,发送给数据库服务 ...
- Visual Studio 2017 怎么将自动生成属性设置为旧版格式
工具:Visual Studio 2017 1.点击工具,进入选项 2.选项窗口左侧找到C#--代码样式,点击 3.找到表达式首选项中:使用属性的表达式主体.使用索引器的表达式主体和使用访问器的表达式 ...