JAVA解析XML之SAX方式

SAX解析xml步骤

  通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
  通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
  创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle

重写DefaultHandle类的方法

  startElement方法用来遍历xml文件的开始标签;

  endElement方法用来遍历xml文件的结束标签;

  startDocument方法用来标识解析开始;

  endDocument方法用来标识解析结束。

  characters方法用来获取text

  其中:参数qName 遍历到的元素的名称

     且同样会出现空白和换行的问题

下面直接上代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <bookstore>
  3. <book id="1">
  4. <name>JAVA编程思想</name>
  5. <anthor>****</anthor>
  6. <year>2000</year>
  7. </book>
  8. <book id="2">
  9. <name>疯狂JAVA系列</name>
  10. <anthor>李刚</anthor>
  11. <price>89</price>
  12. </book>
  13. </bookstore>

books.xml

SAX.java
  1. package pers.zww.xml.handler;
  2.  
  3. import javax.xml.stream.events.StartElement;
  4.  
  5. import org.xml.sax.Attributes;
  6. import org.xml.sax.SAXException;
  7. import org.xml.sax.helpers.DefaultHandler;
  8.  
  9. public class SAXParserHandler extends DefaultHandler{
  10. int bookIndex=0;
  11. /*
  12. * 解析XML元素
  13. */
  14. @Override
  15. public void startElement(String uri, String localName, String qName,
  16. Attributes attributes) throws SAXException {
  17. super.startElement(uri, localName, qName, attributes);
  18. //开始解析book元素的属性
  19.  
  20. if (qName.equals("book")) {
  21. bookIndex++;
  22. System.out.println("开始遍历第"+bookIndex+"本书");
  23.  
  24. // //已知book元素下的属性名称,根据属性名称获取属性值
  25. // String value=attributes.getValue("id");
  26. // System.out.println("book的属性值:"+value);
  27. //未知book元素下的属性名称及个数
  28. int num=attributes.getLength();
  29. for (int i = 0; i < num; i++) {
  30. System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));
  31. System.out.println(" && 属性值:"+attributes.getValue(i));
  32.  
  33. }
  34. }else if(!qName.equals("book")&&!qName.equals("bookstore")){
  35. System.out.print("节点名:"+qName);
  36.  
  37. }else {
  38.  
  39. }
  40. }
  41. @Override
  42. public void characters(char[] ch, int start, int length)
  43. throws SAXException {
  44. // TODO Auto-generated method stub
  45. super.characters(ch, start, length);
  46. String val=new String(ch, start, length);
  47. if (!val.trim().equals("")) {
  48. System.out.println(" && 节点值:"+val);
  49. }
  50. }
  51.  
  52. /*
  53. * 用来遍历xml文件的结束标签
  54. */
  55. @Override
  56. public void endElement(String uri, String localName, String qName)
  57. throws SAXException {
  58. super.endElement(uri, localName, qName);
  59. //是否针对一本书已经遍历结束
  60. if (qName.equals("book")) {
  61. System.out.println("=======================");
  62. }
  63. }
  64.  
  65. /*
  66. * 用来标志解析开始
  67. */
  68. @Override
  69. public void startDocument() throws SAXException {
  70. // TODO Auto-generated method stub
  71. super.startDocument();
  72. //第一行开始
  73. System.out.println("SAX解析开始");
  74. }
  75.  
  76. /*
  77. * 用来标志解析结束
  78. */
  79. @Override
  80. public void endDocument() throws SAXException {
  81. // TODO Auto-generated method stub
  82. super.endDocument();
  83. //最后一行结束
  84. System.out.println("SAX解析结束");
  85. }
  86. }

SAXParserHandler.java

SAX与DOM对比

  DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;

  SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).

参考资料

  慕课网JessicaJiang老师视频教程点击链接

JAVA解析XML之SAX方式的更多相关文章

  1. JAVA解析XML之DOM方式

    JAVA解析XML之DOM方式 准备工作 创建DocumentBuilderFactory对象;    创建DocumentBuilder对象; 通过DocumentBuilder对象的parse方法 ...

  2. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

  3. java解析XML几种方式

    第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序 ...

  4. python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  5. [转载] python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  6. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  7. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  8. java解析xml的几种方式

    java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...

  9. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

随机推荐

  1. Scala之Future

    一.简介 Future提供了一套高效便捷的非阻塞并行操作管理方案.其基本思想很简单,所谓Future,指的是一类占位符对象,用于指代某些尚未完成的计算的结果.一般来说,由Future指代的计算都是并行 ...

  2. 终端应用变身文件 MD5/SHA1 校验工具

    担心下载的文件被恶意篡改?没有找到 Mac 平台文件校验工具?其实 Mac OS X 系统中已经内置了“文件 MD5/SHA1 校验工具”,它就藏身于终端(Terminal)应用中! 打开终端应用,输 ...

  3. sencha toucha获取 constructor中的数据

    config:{ tmp:null }, constructor : function(conf) { this.config.tmp=conf; } 添加配置属性,然后直接用 this.config ...

  4. Linux下Reids的安装和使用

    简单记录一下 redis的官网:https://redis.io/ 官网介绍: Installation Download, extract and compile Redis with: $ wge ...

  5. ArrayList和HashSet的比较

    ArrayList是数组存储的方式 HashSet存储会先进行HashCode值得比较(hashcode和equals方法),若相同就不会再存储 HashCode和HashSet类 Hashset就是 ...

  6. C#数据之DataTable

    C#创建DataTable的几种方式 第一种方式:直接添加数据对象 DataTable table = new DataTable(); table.Columns.Add("strName ...

  7. vuex 中关于 mapState 的作用

    辅助函数 Vuex 除了提供我们 Store 对象外,还对外提供了一系列的辅助函数,方便我们在代码中使用 Vuex,提供了操作 store 的各种属性的一系列语法糖,下面我们来一起看一下: mapSt ...

  8. 在VS2010中如何添加MSCOMM控件,实现串口通讯

      参考文章:http://wenku.baidu.com/link?url=MLGQojaxyHnEgngEAXG8oPnISuM9SVaDzNTvg0oTSrrJkMXIR_6MR3cO_Vnh- ...

  9. qrCode生成二维码图片

    QRCode.js 是一个用于生成二维码图片的插件. 1.文件脚本 var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,th ...

  10. DCDC电路电感和电容啸叫的原因

    电感啸叫原因 如果耳朵能听到啸叫(吱吱声),可以肯定电感两端存在一个20HZ-20KHZ(人耳范围)左右的开关电流. 例如DC-DC电路的电感啸叫,由于负载电流过大 DC内部有一个限流保护电路,当负载 ...