文章目录

  • 一、SAX解析是什么?
    • 1.SAX解析的优缺点
    • 2.SAX解析的步骤
  • 二、SAX解析实例

一、SAX解析是什么?

SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOM解析,PULL解析(Android特有),SAX与DOM不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。

1.SAX解析的优缺点

SAX的优点:

  1. 解析速度快
  2. 占用内存少

SAX的缺点:

  1. 无法知道当前解析标签(节点)的上层标签,及其嵌套结构,仅仅知道当前解析的标签的名字和属性,要知道其他信息需要程序猿自己编码
  2. 只能读取XML,无法修改XML
  3. 无法随机访问某个标签(节点)

SAX解析适用场合

  1. 对于CPU资源宝贵的设备,如Android等移动设备
  2. 对于只需从xml读取信息而无需修改xml

2.SAX解析的步骤

  1. 得到xml文件对应的资源,可以是xml的输入流,文件和uri
  2. 得到SAX解析工厂(SAXParserFactory)
  3. 由解析工厂生产一个SAX解析器(SAXParser)
  4. 传入输入流和handler给解析器,调用parse()解析

二、SAX解析实例

1.XML文件

<?xml version="1.0" encoding="UTF-8" ?>
<department><student id = "110"><name>张三</name><age>12</age></student><student id = "210"><name>李四</name><age>19</age></student><student id = "310"><name>王五</name><age>18</age></student>
</department>

2.新建一个类MyHandler.java,该类需要继承DefaultHandler或者实现ContentHandler接口,这里我们通过实现ContentHandler接口的方式,该类是SAX解析的核心所在,我们要重写以下几个我们关心的方法。

startDocument():文档解析开始时调用,该方法只会调用一次

startElement(String uri, String localName, String qName, Attributes attributes):标签(节点)解析开始时调用

  1. uri:xml文档的命名空间
  2. localName:标签的名字
  3. qName:带命名空间的标签的名字
  4. attributes:标签的属性集

characters(char[] ch, int start, int length):解析标签的内容的时候调用

  1. ch:当前读取到的TextNode(文本节点)的字节数组
  2. start:字节开始的位置,为0则读取全部
  3. length:当前TextNode的长度

endElement(String uri, String localName, String qName):标签(节点)解析结束后调用

endDocument():文档解析结束后调用,该方法只会调用一次

public class MyHandler implements ContentHandler {private String currentData;private Attributes attr = null;@Overridepublic void setDocumentLocator(Locator locator) {}@Overridepublic void startDocument() throws SAXException {System.out.println("解析开始");}@Overridepublic void endDocument() throws SAXException {System.out.println("解析结束");}@Overridepublic void startPrefixMapping(String prefix, String uri) throws SAXException {}@Overridepublic void endPrefixMapping(String prefix) throws SAXException {}@Overridepublic void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {attr = atts;if("student".equals(qName)){String value = attr.getValue("id");//System.out.println(value);if (value != null){System.out.println("id" + ":" + value);}System.out.println(qName);}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if ("name".equals(qName)){System.out.println(qName + ":" + currentData);}if ("age".equals(qName)){System.out.println(qName + ":" + currentData);}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {currentData = new String(ch,start,length);}@Overridepublic void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}@Overridepublic void processingInstruction(String target, String data) throws SAXException {}@Overridepublic void skippedEntity(String name) throws SAXException {}
}
public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException {SAXParserFactory factory=SAXParserFactory.newInstance();//2.得到解析器SAXParser sp=factory.newSAXParser();//3得到解读器XMLReader reader=sp.getXMLReader();//设置内容处理器reader.setContentHandler(new MyHandler());//读取xml的文档内容reader.parse("G:\\input\\01.xml");}


至此解析结束

简单XMLSAX解析相关推荐

  1. 简单json解析(org.json解析方式)

    简单json解析 json解析方式:org.json json数据 org.json依赖 ​ org.json ​ json ​ ${json.version} json解析程序 (1) 创建Vehi ...

  2. yagmail 发送html,PYTHON发送邮件YAGMAIL的简单实现解析

    PYTHON发送邮件YAGMAIL的简单实现解析 这篇文章主要介绍了PYTHON发送邮件YAGMAIL的简单实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...

  3. SAXReader简单的解析xml文件

    SAXReader简单的解析xml文件 工作中遇到了解析XML文件,简单的来记录一下 //获取sax解析器对象 SAXReader reader = new SAXReader(); //设置编码格式 ...

  4. js简单遍历解析json字符串

    js简单遍历解析json字符串 前两天接触到前台的json字符串遍历拼接于是就翻了一些资料总结了一下遍历取值的方法,如有不对请指正,感谢阅读!! 先上json串 { "list": ...

  5. 关于银行报表开发简单思路解析(MYSQL存储过程)

    关于银行报表开发简单思路解析(MYSQL存储过程) 需求分析: 该表为简易银行报表模板,一般为行列模式. 基础表设计: 1.根据业务种类建立对应业务的维度表,一般为客户维度表,产品维度表,资产维度表等 ...

  6. 无线电简单用语.解析

    今天给大家介绍一下无线电的一些简单解析用语,下面用.和-分别表示(.代表滴)(-代表哒) 1 表示 . - 2表示 . . - 3表示 . . .- - 4表示 . . . . - 5表示 . . . ...

  7. FFmpeg的HEVC解码器源代码简单分析 解析器(Parser)部分

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

  8. NKU两题简单题解析(递归分析与位运算技巧)

    题目:http://acm.nankai.edu.cn/p1002.html 题意:对给定的f(n),当 n>=50025002 的时候,f(n)=n-5:当 n<50025002 的时候 ...

  9. 20行代码AC_ 习题8-1 Bin Packing UVA - 1149(贪心+简单二分解析)

    励志用少的代码做高效表达 题意 给定N个物品的中联L1,背包的容量M,同时要求每个背包最多装两个物品,求至少要多少个背包才能装下所有的物品. 解题过程 第一次接触背包类问题. 最初的思路是降序排序,i ...

最新文章

  1. Apache ZooKeeper - FourLetterCommands运维命令
  2. abstractset java_AbstractSet源码分析-java8
  3. 计算机三级网络技术注意事项,2015计算机三级考试《网络技术》复习要点:压缩技术...
  4. TypeScript 里 never 类型的用法举例
  5. 单调栈 leetcode整理(二)
  6. [Ext JS 4] MVC 应用程序框架
  7. 修改帝国cms验证码 每个都不一样
  8. ViewPager判断是向左划还是右划
  9. Linux-socket使用
  10. 早餐为啥不能吃大米粥?医生:不仅是米粥,这3物也最好少吃
  11. [渝粤教育] 广东-国家-开放大学 21秋期末考试土木工程施工10516k1
  12. Android平板 安装deepin,Deepin系统实体安装
  13. Python matplotlib绘制函数曲线
  14. java 绑定mac地址_如何JAVA实现使用TrueLicense在证书中绑定PC的MAC地址,防止止拷贝应用...
  15. 地面分辨率,空间分辨率(GSD为地面采样间隔)
  16. html颜色参考 速查 在线取色,Color by Fardos - 配色/取色插件
  17. 电脑pdf怎么转换成excel表格呢?
  18. 大风车音乐计算机,《大风车》音乐教学
  19. 维克森林大学计算机科学专业好不好,维克森林大学商业分析硕士怎么样?
  20. php callable closure,详解php 使用Callable Closure强制指定回调类型

热门文章

  1. JAVA游戏开发-超炫酷贪吃蛇游戏源码及教程
  2. Eclipse使用手册(基础篇)
  3. matlab编程教程ppt,机械优化设计(MATLAB编程教程+习题).ppt
  4. 英文句子中的字母统计
  5. /dede/plus_bshare.php,简单几个步骤,织梦CMS网站轻松加入bShare分享功能
  6. java allocatedirect_ByteBuffer.allocateDirect()和MappedByteBuffer.load()之间的区别
  7. 简单几步骤查询大量中通物流,并分析退回延误的单号
  8. 中国第二家!理想汽车美股上市 特斯拉蔚来们怎么看?
  9. 如何将SIP链路Message短信转为CDMA短信通过SIGTRAN链路发送
  10. 从零开始实现发送云短信