SAX解析XML文档——(二)
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文档——(二)相关推荐
- Java 使用SAX解析XML文档
DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...
- JAVA SAX解析XML文档
SAX SAX(simple API for XML)是一种XML解析的方法,相比于DOM,SAX的解析更有效更快. 解析步骤 ①获取解析工厂 ②从解析工厂获取解析容器 ③编写处理器 ④加载Docum ...
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风... 恩,听着歌写文档生活就是这么享受. 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊..这还要从前前前几天说起,那 ...
- 大杂烩 -- 四种生成和解析XML文档的方法详解
基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...
- Dom4j 解析Xml文档及 XPath查询 学习笔记
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- xml教程之java解析xml文档
1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...
- java中sax的使用_java使用sax对xml文档的解析
随着互联网技术的发展,XML技术变得越来越重要,从而出现了很多 与XML的整合应用方面的技术,SAX就是其中之一.在这里,我就简要 谈谈java怎样使用sax对xml文档的解析. 首先,让我们来谈谈S ...
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
最新文章
- linux新建文件权限问题
- python 人工智能库_人工智能与Python库的关系
- 最先进的AI还不如动物聪明?首届AI-动物奥运会英国开赛!
- 基于HTML5实现的(本地存储)多标签页面元素的复制粘贴
- 利用python卷积神经网络手写数字识别_Keras深度学习:卷积神经网络手写数字识别...
- 如何汉化DNN--中文语言包的使用
- 用ram实现寄存器堆_纯C语言实现bootloader
- iOS上相见恨晚的6个APP
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Caffe编译代码的时候报各种未定义未声明
- 的使用_面部精华使用方法和使用步骤;
- 你必须知道的session与cookie
- Linux内核分析 - 网络[五]:vlan协议-802.1q
- Sharding-JDBC读写分离_MySql主从配置(2)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记016
- 20200715每日一句
- 网络安全等级保护细则
- 安全合规/等级保护--10--等级保护介绍及流程
- 离散数学——命题逻辑
- zabbix报警方式,邮件报警和微信报警。
- 【AWS云从业者基础知识笔记】——模块1:AWS服务简介