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的优势在于其解析速度较快,占用内存较少(相对 ...
随机推荐
- C#转发Post请求,包括参数和文件
/// <summary> /// 转发Post请求 /// </summary> /// <param name="curRequest">要 ...
- 巧妙设置Texture Type,将ShadowMask内存占用变成之前的1/4
0x00 前言 在这篇文章中,我选择了过去一周Unity官方社区交流群中比较有代表性的几个问题,总结在这里和大家进行分享.同时,也欢迎大家加入我们这个讨论干货的官方技术群,交流看法分享经验. Unit ...
- eclipse集成lombok
第一部下载 lombok jar包 https://projectlombok.org/download.html lombok下载地址,进入该网址后可以看到如下界面,点击下载就行了. 下载 ja ...
- [Swift]LeetCode419. 甲板上的战舰 | Battleships in a Board
Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, ...
- 像素数据YUV简介与觉存储格式介绍
主要学习链接:博客园.51CTO 前言 照例是先废话几句,下面的内容都是在学习时从网上找来的,并非我原创,我之所以要写这篇笔记是因为网的内容都很分散,找的时候要从各个地方看,很不方便,所以就自己总结了 ...
- 优化之Joiner组件
Joiner组件在运行时需要额外的内存空间处理中间结果,因此会影响性能 可通过查看Joiner performance计数器来决定Joiner组件是否需要优化 通过如下方式优化Joiner组件 将Ma ...
- CMake根据平台移植检查设置文件编译选项
#添加函数检查功能 include(CheckFunctionExists) //检查系统是否支持accpet4,将检查结果设置至HAVE_ACCEPT4 check_function_exists( ...
- Docker基础命令和时区问题
Docker 命令 1. 安装Docker # ubuntu系统安装 $ sudo apt install docker-ce # 启动docker $ sudo systemctl start do ...
- maven的安装与配置(本地仓库、阿里云镜像设置)
参考一:https://www.cnblogs.com/sigm/p/6035155.html 参考二:https://blog.csdn.net/AmaniZ/article/details/792 ...
- java设计模式(2)---六大原则
设计模式之六大原则 这篇博客非常有意义,希望自己能够理解的基础上,在实际开发中融入这些思想,运用里面的精髓. 先列出六大原则:单一职责原则.里氏替换原则.接口隔离原则.依赖倒置原则.迪米特原则.开闭原 ...