1、获取一个SAXParserFactory的实例。2、通过factory获取SAXParser实例。

3、新建一个包和继承自DefaultHandler的类。
因为SAX遍历方式,比如便利一个节点<a></a>是需要startHandler便利起始标签<a>,还需要endHandler便利结束标签</a>。
4、将XML文件路径和SAXParserHandler实例对象作为 SAXParser对象 的参数使用。然后运行验证执行初始情况。
5、在SAXParserHandler类中添加一个访问元素的方法,startElement。
6、所以需要进一步修改,条件过滤:
不过,以上是已知标签属性名称的情况下使用的,getValue("id")获取属性值。下面是未知标签属性名称以及个数的情况下,怎么访问标签属性名和属性值。
当我把XML的第一个book节点添加了一个属性和属性值,再运行上面的程序:
7、解析XML文件的节点名和节点间文本。这里需要endElemet方法打印输出一个节点的访问结束。
然后还要重写一个方法characters方法,这个方法的第一个参数char[ ] ch这个是加载了整个xml的数据字节内容。
这里就直接上代码吧:
注意这里用了去尾空格的方法,然后判断为空字符。这个方法比较巧妙。
上代码吧:

 1 package com.goodboy.saxtest;
 2
 3 import java.io.IOException;
 4
 5 import javax.xml.parsers.ParserConfigurationException;
 6 import javax.xml.parsers.SAXParser;
 7 import javax.xml.parsers.SAXParserFactory;
 8
 9 import org.xml.sax.SAXException;
10
11 import com.goodboy.SAXParserHandler.SAXParserHandlerTest;
12
13 public class SAXTest {
14
15     public static void main(String[] args) {
16         SAXParserFactory factory = SAXParserFactory.newInstance();
17         try {
18             SAXParser sax = factory.newSAXParser();
19             //创建一个SAXParserHandler对象
20             SAXParserHandlerTest handler = new SAXParserHandlerTest();
21             //作为参数使用
22             sax.parse("books.xml", handler);
23         } catch (ParserConfigurationException e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         } catch (SAXException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         } catch (IOException e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         }
33     }
34
35 }

SAXTest(main)

 1 package com.goodboy.SAXParserHandler;
 2
 3 import org.xml.sax.Attributes;
 4 import org.xml.sax.SAXException;
 5 import org.xml.sax.helpers.DefaultHandler;
 6
 7 public class SAXParserHandlerTest extends DefaultHandler {
 8     @Override
 9     public void startDocument() throws SAXException {
10         super.startDocument();
11         System.out.println("解析开始");
12     }
13     @Override
14     public void startElement(String uri, String localName, String qName,
15             Attributes attributes) throws SAXException {
16         super.startElement(uri, localName, qName, attributes);
17         System.out.println("=====开始访问节点"+qName+"=====");
18         //这里的qName是标签名
19         if (qName.equals("book") ) {
20             System.out.println("属性的个数:"+attributes.getLength());
21             for (int i = 0; i < attributes.getLength(); i++) {
22                 String name = attributes.getQName(i);
23                 System.out.println("属性名:"+name);
24                 String value = attributes.getValue(i);
25                 System.out.println("属性值:"+value);
26             }
27         }else if(!qName.equals("book") && !qName.equals("bookstore") ) {
28             System.out.print("属性名:"+qName);
29         }
30     }
31     @Override
32     public void endElement(String uri, String localName, String qName)
33             throws SAXException {
34         super.endElement(uri, localName, qName);
35         System.out.println("=====结束访问节点"+qName+"=====");
36     }
37     @Override
38     public void endDocument() throws SAXException {
39         super.endDocument();
40         System.out.println("解析结束");
41     }
42     @Override
43     public void characters(char[] ch, int start, int length)
44             throws SAXException {
45         super.characters(ch, start, length);
46         String name = new String(ch, start, length);
47         if (!name.trim().equals("")) {
48             System.out.println(" 节点中的内容:"+name);
49         }
50     }
51 }

DefaultHandler对象

 最后  使用SAX解析将XML的内容和结构存入JAVA对象

1、建立一个book类:

后续步骤就制作动态图片了,因为比较繁琐,就直接上代码了:
<理解的要点,就是这里面的重写的中间三个方法(startElement,characters,endElement),他们在解析XML的执行顺序,然后合理的结合这些方法的参数,合理的使用全局变量,将XML转为集合数据>
 1 package com.goodboy.SAXParserHandler;
 2
 3 import java.util.ArrayList;
 4
 5 import org.xml.sax.Attributes;
 6 import org.xml.sax.SAXException;
 7 import org.xml.sax.helpers.DefaultHandler;
 8
 9 import com.goodboy.entity.Book;
10
11 public class SAXParserHandlerTest extends DefaultHandler {
12     Book book = null;
13     String value = null;
14     ArrayList<Book> booklist = new ArrayList<Book>();
15     public ArrayList<Book> getBooklist() {
16         return booklist;
17     }
18     @Override
19     public void startDocument() throws SAXException {
20         super.startDocument();
21         System.out.println("解析开始");
22     }
23     @Override
24     public void startElement(String uri, String localName, String qName,
25             Attributes attributes) throws SAXException {
26         super.startElement(uri, localName, qName, attributes);
27         System.out.println("=====开始访问节点"+qName+"=====");
28         //这里的qName是标签名,也是集合的元素名
29         if (qName.equals("book") ) {
30             book = new Book();
31             System.out.println("属性的个数:"+attributes.getLength());
32             for (int i = 0; i < attributes.getLength(); i++) {
33                 if(attributes.getQName(i).equals("id")){
34                     book.setId(attributes.getValue(i));
35                     System.out.println("book.getId:"+book.getId());
36                 }
37             }
38         }else if(!qName.equals("book") && !qName.equals("bookstore") ) {
39             System.out.print("属性名:"+qName);
40         }
41     }
42     @Override
43     public void characters(char[] ch, int start, int length)
44             throws SAXException {
45         super.characters(ch, start, length);
46         String name = new String(ch, start, length);
47         if (!name.trim().equals("")) {
48             System.out.println(" 节点中的内容:"+name);
49             value = name;
50         }
51     }
52     @Override
53     public void endElement(String uri, String localName, String qName)
54             throws SAXException {
55         super.endElement(uri, localName, qName);
56         System.out.println("=====结束访问节点"+qName+"=====");
57         if (qName.equals("name")) {
58             book.setName(value);
59         }
60         if (qName.equals("author")) {
61             book.setAuthor(value);
62         }
63         if (qName.equals("year")) {
64             book.setYear(value);
65         }
66         if (qName.equals("prive")) {
67             book.setPrice(value);
68         }
69         if (qName.equals("language")) {
70             book.setLanguage(value);
71         }
72         if (qName.equals("book")) {
73             booklist.add(book);
74             book = null;
75         }
76         value = null;
77     }
78     @Override
79     public void endDocument() throws SAXException {
80         super.endDocument();
81         System.out.println("book集合的长度"+booklist.size());
82         System.out.println(booklist.get(0).getName());
83         System.out.println("解析结束");
84     }
85 }

转载于:https://www.cnblogs.com/goodboy-heyang/p/4747222.html

Java眼中的XML--文件读取--2 应用SAX方式解析XML相关推荐

  1. sax dom html解析xml,Python通过DOM和SAX方式解析XML的应用实例分享

    XML.DOM 需求 有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样. 上游跑时会根据配置从源文件中提取,到入库这一步需要根据配置进行建表. ...

  2. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /*** 短信的业务bean* @author Administrator ...

  3. Android中使用SAX方式解析XML文件

    转载http://blog.csdn.net/cjjky/article/details/6666834 在Android中解析XML文主要有三种方式,分别为Simple API for XML(SA ...

  4. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. JavaXml教程(五)使用SAX方式解析XML文件

    Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...

  6. Hello Qt(三十九)——SAX方式解析XML

    一.SAX简介 SAX是Simple API for XML的简写,是一种解析XML文件的替代方法,不是由W3C官方所提出的标准,是一种事件驱动的XML API,接近于底层,速度较快,但不便于随机访问 ...

  7. python解析xml文件选用模块_python-minidom模块【解析xml】

    1,xml的文档结构 1.1,XML文档包括XML头信息和XML信息体 1.1.1,XML文档头信息 它表明了此XML文档所用的版本,编码方式.有些复杂的还有一些文档类型的定义(DOCTYPE),用于 ...

  8. SAX 方式解析 XML

    SAXParserFactory factory = SAXParserFactory.newInstance();try {SAXParser parser = factory.newSAXPars ...

  9. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

最新文章

  1. 记录某段程序的运行时间
  2. tomcat 软连接
  3. p2596 书架(Treap)
  4. 含最新数据! 使用Python检测新冠肺炎疫情拐点
  5. Effective C#(二)
  6. java的归并排序算法_归并排序算法Java实现
  7. 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)
  8. 男人对待恋爱的不同阶段......
  9. 福州大学c语言考试答案,C语言练习模拟考福州大学工程技术学院.doc
  10. linux一切皆是文件_Linux 的虚拟文件系统(真正理解“一切皆文件”)
  11. 代数学笔记3: 分裂域
  12. 防止内存泄露 Linux下用Valgrind做检查【ZT】
  13. git 取消 所有暂存_Git版本管理完全指南—学好Git一文足矣
  14. 气缸标识上vr什么意思_汽车VR传感器是什么意思?
  15. 2019.10.15学习总结
  16. SSM框架-实现Mybatis分页功能-foreknow_cms
  17. mybatis-plus中的select
  18. MYSQL误删数据恢复
  19. PC ACCESS 测试客户机出现错误 win7 64位
  20. 乡村老师网络计算机培训日志,乡村年轻女教师 “教育日记”火爆网络

热门文章

  1. Apache开启Gzip压缩,LAMP网页压缩
  2. Oracle数据库用户角色、表空间创建、删除命令
  3. linux每一个账号都须具备,Linux 用户管理
  4. Libnids库-网络入侵检测的基础框架
  5. Windows XP硬盘安装Ubuntu 11.10双系统全程图解
  6. MyBatis 框架概述
  7. 通过GPG非对称加密工具验证ECharts发布版本实例演示,win10下Gnu Privacy Guard工具的安装和使用方法
  8. 公司的5GWiFi延迟有多低?来看图体验一下!
  9. Windows 技巧篇 - cmd的复制和粘贴功能
  10. matlab中的square函数