SAX从上向下解析,一行一行解析。节省内存,不适合CRUD。

XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<书架><书><书名 name="xxxxx">Java高级</书名><作者>武陟县</作者><价格>200元</价格></书><书><书名>Java中级</书名><作者>打火机</作者><价格>2000元</价格></书>
</书架>

--------------------------------------------解析所有的内容:-----------------

  1 package XMLParse;
  2
  3 import javax.xml.parsers.ParserConfigurationException;
  4 import javax.xml.parsers.SAXParser;
  5 import javax.xml.parsers.SAXParserFactory;
  6
  7 import org.apache.commons.lang.Validate;
  8 import org.xml.sax.Attributes;
  9 import org.xml.sax.ContentHandler;
 10 import org.xml.sax.Locator;
 11 import org.xml.sax.SAXException;
 12 import org.xml.sax.XMLReader;
 13
 14 public class Demo1 {
 15
 16     public static void main(String[] args) throws Exception {
 17         // 1.创建解析工厂
 18         SAXParserFactory factory = SAXParserFactory.newInstance();
 19         // 2.得到解析器
 20         SAXParser sParser = factory.newSAXParser();
 21         // 3.得到读取器
 22         XMLReader reader = sParser.getXMLReader();
 23         // 4.设置内容处理器
 24         reader.setContentHandler(new ListHandler());
 25         // 5.读取xml文件
 26         reader.parse("src/Book.xml");
 27     }
 28 }
 29
 30 // 得到xml文档的所有内容
 31 class ListHandler implements ContentHandler {
 32
 33     // 处理开始标签
 34     @Override
 35     public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
 36         System.out.println("<" + qName + ">");
 37 //        常用的循环方式      读取属性
 38         for (int i = 0;atts!=null && i < atts.getLength(); i++) {
 39             String attName = atts.getQName(i);
 40             String attValue = atts.getValue(i);
 41             System.out.println(attName+"="+attValue);
 42         }
 43     }
 44
 45     // 处理内容
 46     @Override
 47     public void characters(char[] ch, int start, int length) throws SAXException {
 48         // TODO Auto-generated method stub
 49         System.out.println(new String(ch, start, length));
 50     }
 51
 52     // 处理结束标签
 53     @Override
 54     public void endElement(String uri, String localName, String qName) throws SAXException {
 55         System.out.println("</" + qName + ">");
 56
 57     }
 58
 59     @Override
 60     public void setDocumentLocator(Locator locator) {
 61         // TODO Auto-generated method stub
 62
 63     }
 64
 65     @Override
 66     public void startDocument() throws SAXException {
 67         // TODO Auto-generated method stub
 68
 69     }
 70
 71     @Override
 72     public void endDocument() throws SAXException {
 73         // TODO Auto-generated method stub
 74
 75     }
 76
 77     @Override
 78     public void startPrefixMapping(String prefix, String uri) throws SAXException {
 79         // TODO Auto-generated method stub
 80
 81     }
 82
 83     @Override
 84     public void endPrefixMapping(String prefix) throws SAXException {
 85         // TODO Auto-generated method stub
 86
 87     }
 88
 89     @Override
 90     public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
 91         // TODO Auto-generated method stub
 92
 93     }
 94
 95     @Override
 96     public void processingInstruction(String target, String data) throws SAXException {
 97         // TODO Auto-generated method stub
 98
 99     }
100
101     @Override
102     public void skippedEntity(String name) throws SAXException {
103         // TODO Auto-generated method stub
104
105     }
106
107 }

结果:

<书架><书><书名>
name=xxxxx
Java高级
</书名><作者>
武陟县
</作者><价格>
200元
</价格></书><书><书名>
Java中级
</书名><作者>
打火机
</作者><价格>
2000元
</价格></书></书架>

 -----------------------------------------解析指定的标签------------------------------------------------------

 1 package XMLParse;
 2
 3 import javax.xml.parsers.ParserConfigurationException;
 4 import javax.xml.parsers.SAXParser;
 5 import javax.xml.parsers.SAXParserFactory;
 6
 7 import org.apache.commons.lang.Validate;
 8 import org.xml.sax.Attributes;
 9 import org.xml.sax.ContentHandler;
10 import org.xml.sax.Locator;
11 import org.xml.sax.SAXException;
12 import org.xml.sax.XMLReader;
13 import org.xml.sax.helpers.DefaultHandler;
14
15 public class Demo3 {
16
17     public static void main(String[] args) throws Exception {
18         // 1.创建解析工厂
19         SAXParserFactory factory = SAXParserFactory.newInstance();
20         // 2.得到解析器
21         SAXParser sParser = factory.newSAXParser();
22         // 3.得到读取器
23         XMLReader reader = sParser.getXMLReader();
24         // 4.设置内容处理器
25         reader.setContentHandler(new TagValueHandler_1());
26         // 5.读取xml文件
27         reader.parse("src/Book.xml");
28     }
29 }
30
31 //读取指定的标签(读取书名)
32 class TagValueHandler_1 extends DefaultHandler{
33
34     private String currentTag;  //记住当前的标签是那个
35     private int needNum = 2;    //记住需要第几个
36     private int currentNum;     //记住当前是第几个
37
38     @Override
39     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
40         if("书名".equals(qName)){
41             currentTag="书名";
42             currentNum++;
43         }
44     }
45
46     @Override
47     public void endElement(String uri, String localName, String qName) throws SAXException {
48         currentTag=null;
49     }
50
51     @Override
52     public void characters(char[] ch, int start, int length) throws SAXException {
53         if("书名".equals(currentTag)&&needNum==currentNum){
54             System.out.println(new String(ch,start,length));
55         }
56     }
57
58 }

结果:

Java中级

-------------------------------------解析后封装到对象------------------------------

package XMLParse;import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.apache.commons.lang.Validate;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;public class Demo4 {public static void main(String[] args) throws Exception {// 1.创建解析工厂SAXParserFactory factory = SAXParserFactory.newInstance();// 2.得到解析器SAXParser sParser = factory.newSAXParser();// 3.得到读取器XMLReader reader = sParser.getXMLReader();// 4.设置内容处理器ListBeanHandler listBeanHandler = new ListBeanHandler();reader.setContentHandler(listBeanHandler);// 5.读取xml文件reader.parse("src/Book.xml");List<Book> list = listBeanHandler.getList();System.out.println(list);}
}// 读取指定的标签(读取书名)
class ListBeanHandler extends DefaultHandler {private String currentTag; // 记住当前的标签是那个private List<Book> list = new ArrayList<Book>();private Book book;@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {currentTag = qName;if ("书".equals(qName)) {book = new Book();}}@Override public void characters(char[] ch, int start, int length) throws SAXException {if("书名".equals(currentTag)){book.setName(new String(ch, start, length));}if("作者".equals(currentTag)){book.setAuthor(new String(ch, start, length));}if("价格".equals(currentTag)){book.setPrice(new String(ch, start, length));}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {currentTag = null;if("书".equals(qName)){list.add(book);book=null;}}public List<Book> getList() {return list;}public void setList(List<Book> list) {this.list = list;}}

结果:

SAX解析XML文档——(二)相关推荐

  1. Java 使用SAX解析XML文档

    DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...

  2. JAVA SAX解析XML文档

    SAX SAX(simple API for XML)是一种XML解析的方法,相比于DOM,SAX的解析更有效更快. 解析步骤 ①获取解析工厂 ②从解析工厂获取解析容器 ③编写处理器 ④加载Docum ...

  3. cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)

    今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风... 恩,听着歌写文档生活就是这么享受. 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊..这还要从前前前几天说起,那 ...

  4. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  5. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  6. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  7. xml教程之java解析xml文档

    1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...

  8. java中sax的使用_java使用sax对xml文档的解析

    随着互联网技术的发展,XML技术变得越来越重要,从而出现了很多 与XML的整合应用方面的技术,SAX就是其中之一.在这里,我就简要 谈谈java怎样使用sax对xml文档的解析. 首先,让我们来谈谈S ...

  9. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

最新文章

  1. linux新建文件权限问题
  2. python 人工智能库_人工智能与Python库的关系
  3. 最先进的AI还不如动物聪明?首届AI-动物奥运会英国开赛!
  4. 基于HTML5实现的(本地存储)多标签页面元素的复制粘贴
  5. 利用python卷积神经网络手写数字识别_Keras深度学习:卷积神经网络手写数字识别...
  6. 如何汉化DNN--中文语言包的使用
  7. 用ram实现寄存器堆_纯C语言实现bootloader
  8. iOS上相见恨晚的6个APP
  9. 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  10. Caffe编译代码的时候报各种未定义未声明
  11. 的使用_面部精华使用方法和使用步骤;
  12. 你必须知道的session与cookie
  13. Linux内核分析 - 网络[五]:vlan协议-802.1q
  14. Sharding-JDBC读写分离_MySql主从配置(2)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记016
  15. 20200715每日一句
  16. 网络安全等级保护细则
  17. 安全合规/等级保护--10--等级保护介绍及流程
  18. 离散数学——命题逻辑
  19. zabbix报警方式,邮件报警和微信报警。
  20. 【AWS云从业者基础知识笔记】——模块1:AWS服务简介

热门文章

  1. 连夜撸了一个简易聊天室
  2. 总结:被MySQL UTF8编码坑的惨痛教训...
  3. 如何给女朋友解释什么是“元宇宙”?
  4. JupyterLab 3.0发布!
  5. 最新调查,48%的美国人表示不会乘坐自动驾驶汽车
  6. MATLAB 不能用了,哪些替代品可以继续搞科研?
  7. 竞赛老陪跑怎么办?来自一位Kaggle比赛失败者的含泪总结
  8. 又一个创业者自杀:心生郁结,被曝曾卖房给员工发工资
  9. 百所学校寒假时长排行,看看你的学校排多少名~
  10. 我是村里唯一的PM,哈哈哈…