2017/4/25-SAX解析XML文件
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文件的更多相关文章
- JAVA使用SAX解析XML文件
		
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
 - 用SAX解析xml文件,java
		
(此文为(https://www.imooc.com/video/4482)之随笔) 1.用SAX解析xml文件大致分为三步 写了一个XML文件作为例子 (1)main方法代码如下: import j ...
 - sax解析xml文件的DefaultHandler处理类
		
一千年的时光,我无数次掀起岁月的帷幔,只为和你,在某一个平静如水的日子相遇,然后相识,倾情一生,缱绻一世,好美的散文,好吧,我情愿把这个“你”当作android:),使用sax解析xml文件是我见到过 ...
 - SAX解析xml文件
		
需要做一个银行名字的列表. 因为有很多,所以想到了用xml来保存,然后uongDAX解析. public class BankSelectActivity extends BaseActivity{ ...
 - cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)
		
今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...
 - 安卓SAX解析XML文件
		
XML文件经常使用的解析方式有DOM解析,SAX解析. 一.Sax SAX(simpleAPIforXML)是一种XML解析的替代方法. 相比于DOM.SAX是一种速度更快,更有效的方法. 它逐行扫描 ...
 - Python—使用xml.sax解析xml文件
		
什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处 ...
 - Java中实现SAX解析xml文件到MySQL数据库
		
大致步骤: 1.Java bean 2.DBHelper.java 3.重写DefaultHandler中的方法:MyHander.java 4.循环写数据库:SAXParserDemo.java ① ...
 - sax解析xml文件,封装到对象中
		
创建User.java类 public class User { private String id; private String name; private String age; private ...
 - android  sax解析xml 文件  动态加载标题
		
要解决一个问题 : 问题描述为 把标题动态的加载到 listView子布局中 我们首先通过 java程序写一个把标题写到xml文件的程序.这个程序会在以后讲解. 现在截图 已经写好的xm文件格式如下 ...
 
随机推荐
- mysql 修改数据库data存放位置
			
一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开MySQL默认的安装文件夹C:\Program Files\MySQL\MySQL Server 5 ...
 - 谈谈Backbone.js中的el
			
小编最近开始接触backbone.js,这个曾经非常优秀的一款MVC前端框架,在学习的过程中,遇到下图的这样一个问题 下面上代码 小编的想法很简单,只是view了一个实例,然后在initalize中调 ...
 - 搭建高可用mongo集群3.4版本
			
搭建高可用mongo集群3.4版本 说在开始之前:在搭建这个环境之前,已经有了一个师兄搭好的环境,虽然一样很棒,但是没有经过自己的手出来的东西,还是不属于自己,所以摸索着自己搭建一个吧,好巧不巧的是, ...
 - mui学习链接
			
http://dev.dcloud.net.cn/mui/snippet/ http://www.bcty365.com/content-146-2453-1.html hbuilder转rem值: ...
 - windows phone 8.1开发SQlite数据库操作详解
			
原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...
 - reactjs Uncaught TypeError: Cannot read property 'location' of undefined
			
reactjs Uncaught TypeError: Cannot read property 'location' of undefined reactjs 路由配置 怎么跳转 不成功 国内搜索引 ...
 - iOS 如何保持线程一直在运转(二)
			
一.接着上一篇通过NSThread可以方便的创建一个线程,并且启动线程的Runloop,在线程体中执行一个while循环 然后我们就可以方便得利用这个线程了 - (void)threadRun:(NS ...
 - 设置EditText控件中提示消息hint的字体颜色和大小
			
设置EditText控件中提示消息hint的字体颜色和大小 1.设置字体大小 代码例: public void init(){ hint= (EditText) findViewById(R.id.i ...
 - iOS开发之数据存储之Preference(偏好设置)
			
1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好 ...
 - IOS开发创建开发证书及发布App应用(九)——等待审核(审核几种状态)
			
以下是App应用的几种状态,如果看不到英文,建议复制到网站翻译一下就行,意思差不多能明白的 以上整套流程是在2013年写的,可能有些地方已经不太一样了,只是给大家做一下参考,毕竟再怎么改大概流程还是差 ...