文章目录

  • 一、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. AE,按照属性值关系选择要素
  2. QQ圈子:从哪里来,到哪里去
  3. 国外公司技术博客盘点
  4. 广电总局清查整治电视购物频道 23档收藏类购物节目停播
  5. php框架中间件,【框架十】Coder PHP Framework 中间件
  6. 密码机分类---服务器密码机
  7. 论文阅读笔记:Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieva
  8. latex插入参考文献技巧
  9. Mac/Linux 安装ab(Apache Benchmark)
  10. 15种不用花钱就能放生的方法,你知道吗?
  11. Android项目:基于Android手机校园外卖订餐系统(计算机毕业设计)
  12. 哪位仁兄在狂顶精华贴?
  13. IT江湖--这个冬天注定横尸遍野
  14. 并发编程五:java并发线程池底层原理详解和源码分析
  15. IntelliJ IDEA的下载安装与破解
  16. 大型电商架构亿级流量电商详情页系统--实战 缓存同步,热点key统计 降级
  17. dns配置异常怎么修复_DNS配置错误,电脑管家又修复不了,怎么办。
  18. 去掉FRAME或IFRAME中周围空白的方法
  19. 南邮Android实验报告三:基于高德地图的综合应用
  20. 联想天逸510pro开机故障,迁移主机硬盘

热门文章

  1. 网易旗下游戏怼《王者荣耀》抄袭 :赚那么多钱请个会原创的设计师嘛 !
  2. linux网络延时工具,Linux性能优化(八)——网络测试工具
  3. 【附源码】计算机毕业设计SSM西仰陵农贸市场网销系统
  4. 无线自组织网的通信协议栈
  5. 暴雪战网服务器维护时间,炉石传说停机维护30小时 暴雪与网易做了个艰难的决定...
  6. 暑假博客二:由前序中序遍历生成二叉树
  7. 柱状图柱子间隔和圆角及渐变色设置
  8. Python调用VBA事件编程监控Excel
  9. vant weapp example 配置
  10. 支付退款 报错:ACQ.INVALID_PARAMETER