SAX解析XML

  1、分析

    SAX是按照XML文件的顺序执行,可以说是边扫描,边解析。所以无须将整个文件加载至内存中。

  

  2、优点

    1)占用内存少。

    2)解析效率高。

  

  3、缺点

    1)只能进行读取。

    2)无法修改xml中节点数据。

    3)无法知道正在遍历的节点的上一节点的名称,并且无法任意访问某一节点。

  

  4、使用场合

    1)大型XML文件,并且只需要一次性读取xml文件的内容。

  

  5、讲解

    1)自定义解析类需继承DefaultHandler( org.xml.sax.helpers.DefaultHandler)。

    2)重写父类中的多个方法即可。

      a)startDocument() : 该方法是开始解析xml的方法。

      b)startElement() : 该方法是解析某个标签(<name>),获取当前标签名称及属性。

      c)characters() : 在解析到某个标签时,获取标签内容值的时候调用。

      d)endElement() : 该方法为某个标签(</name>)解析完后调用。

      e)endDocument() : 该方法为整个xml文件解析完时调用。

  6、详解

    1)XML文件示例

<?xml version="1.0" encoding="utf-8"?>

<books>
<book>
<id>10001</id>
<name>JAVA BOOK</name>
<author>James Gosling</author>
<publishDate>2017-04-24</publishDate>
</book>
<book>
<id>10002</id>
<name>C BOOK</name>
<author>Dennis Ritchie</author>
<publishDate>2017-04-24</publishDate>
</book>
</books>

    2)自定义SAXParserHandler类,继承DefaultHandler类,重写5个方法。

package com.mean.xml.sax.handler;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; /**
* SAX解析XML文件
* @author zhangjk
*/
public class SAXParserHandler extends DefaultHandler {
private boolean isUsefulElement; public SAXParserHandler() {
isUsefulElement = false;
} @Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("--------开始解析XML--------");
} @Override
public void startElement(String uri, String localName, String element, Attributes attributes) throws SAXException {
if (element.equals("books")) {
isUsefulElement = true;
} else if (element.equals("book")) {
System.out.println("--------开始解析本书--------");
isUsefulElement = true;
} else {
System.out.println("element:" + element);
isUsefulElement = false;
}
} @Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (!isUsefulElement) {
String value = new String(ch, start, length).trim();
if (!value.isEmpty()) {
System.out.println("value:" + value);
}
}
} @Override
public void endElement(String uri, String localName, String element) throws SAXException {
if (element.equals("book")) {
System.out.println("--------书本解析完毕--------");
}
} @Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("--------XML解析完毕--------");
} public static SAXParserHandler getInstance() {
if (SAXParserHanderSingle.INSTANCE == null) {
SAXParserHanderSingle.INSTANCE = new SAXParserHandler();
}
return SAXParserHanderSingle.INSTANCE;
} private static class SAXParserHanderSingle {
private static SAXParserHandler INSTANCE = new SAXParserHandler();
}
}

  

  7、步骤

    1)首先获取SAXParserFactory(SAX解析工厂)对象。

    2)从SAXParserFactory对象中获取SAXParser(SAX解析)对象。

    3)创建自定义的SAXParserHandler类对象。

    4)调用步骤2中SAX解析对象的parse()方法,参数分别为XML文件的输入流,自定义的SAX解析类。    

        String path = Class.class.getResource("/").getPath() + "Book.xml";
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
SAXParserHandler sax = SAXParserHandler.getInstance();
saxParser.parse(new FileInputStream(new File(path)), sax);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

  注:本文部分参考引用

  1、http://blog.csdn.net/ydxlt/article/details/50183693

2017/4/25-SAX解析XML文件的更多相关文章

  1. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  2. 用SAX解析xml文件,java

    (此文为(https://www.imooc.com/video/4482)之随笔) 1.用SAX解析xml文件大致分为三步 写了一个XML文件作为例子 (1)main方法代码如下: import j ...

  3. sax解析xml文件的DefaultHandler处理类

    一千年的时光,我无数次掀起岁月的帷幔,只为和你,在某一个平静如水的日子相遇,然后相识,倾情一生,缱绻一世,好美的散文,好吧,我情愿把这个“你”当作android:),使用sax解析xml文件是我见到过 ...

  4. SAX解析xml文件

    需要做一个银行名字的列表. 因为有很多,所以想到了用xml来保存,然后uongDAX解析. public class BankSelectActivity extends BaseActivity{ ...

  5. cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

    今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...

  6. 安卓SAX解析XML文件

    XML文件经常使用的解析方式有DOM解析,SAX解析. 一.Sax SAX(simpleAPIforXML)是一种XML解析的替代方法. 相比于DOM.SAX是一种速度更快,更有效的方法. 它逐行扫描 ...

  7. Python—使用xml.sax解析xml文件

    什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处 ...

  8. Java中实现SAX解析xml文件到MySQL数据库

    大致步骤: 1.Java bean 2.DBHelper.java 3.重写DefaultHandler中的方法:MyHander.java 4.循环写数据库:SAXParserDemo.java ① ...

  9. sax解析xml文件,封装到对象中

    创建User.java类 public class User { private String id; private String name; private String age; private ...

  10. android sax解析xml 文件 动态加载标题

    要解决一个问题 : 问题描述为 把标题动态的加载到 listView子布局中 我们首先通过 java程序写一个把标题写到xml文件的程序.这个程序会在以后讲解. 现在截图 已经写好的xm文件格式如下 ...

随机推荐

  1. wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法

    wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...

  2. 列表总结Canvas和SVG的区别

    参考链接: 菜鸟教程 HTML5 内联SVG 经典面试题(讨论canvas与svg的区别) Canvas | SVG ---|--- 通过 JavaScript 来绘制 2D 图形|是一种使用 XML ...

  3. 机器学习基石 2 Learning to Answer Yes/No

    机器学习基石 2 Learning to Answer Yes/No Perceptron Hypothesis Set 对于一个线性可分的二分类问题,我们可以采用感知器 (Perceptron)这种 ...

  4. webpack 安装流程

    我最近想看看wabpack,然后就面临着安装的问题,说实话,我一点也不懂cmd,怎么还需要用cmd安装呢.其实看教程上说可以在npm上安装,但是我打开npm总是出现闪退,所以我就选择了cmd 安装的过 ...

  5. maven 的 snapshot 和 release 的区别

    release 是发行版,通常正式发布使用. snapshot 快照版本.在开发过程中,每提交一次修改,编译好响应的jar包,都会更新到仓库中,所有添加了这个jar包的依赖都会把远程仓库里的jar包更 ...

  6. mysql 索引篇

    一.索引优化   索引优化主要还是依赖explain命令,关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output,这里需要强调rows是核心指标,绝大部分r ...

  7. 构建微服务(Building Microservices)-PDF 文档

    闲时翻译了几篇基于Spring Cloud.Netflix OSS 构建微服务的英文文章,为方便分享交流,整理为PDF文档. PDF 文档目录: 目录 一.微服务操作模型... 3 1.     前提 ...

  8. MVC插件实现

    本人第一篇随笔,在园子里逛了这么久,今天也记录一篇自己的劳动成果,也是给自己以后留个记录. 最近领导让我搞一下插件化,就是实现多个web工程通过配置文件进行组装.之前由于做过一个简单的算是有点经验,当 ...

  9. jst通用删除数组中重复的值和删除字符串中重复的字符

    以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...

  10. AutoIt 脚本小试——刷网易云音乐歌单

    AutoIt 确实是个很强大的脚本工具. 如果早知道有这个,当初是怎么都不会去学易语言的  (๑•̀ω•́๑) 这是个简单脚本 = ๛ก(ー̀ωー́ก) 用来增加歌单播放次数和个人的听歌量. 原理不过 ...