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

XML文档:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <书架>
  3. <书>
  4. <书名 name="xxxxx">Java高级</书名>
  5. <作者>武陟县</作者>
  6. <价格>200元</价格>
  7. </书>
  8. <书>
  9. <书名>Java中级</书名>
  10. <作者>打火机</作者>
  11. <价格>2000元</价格>
  12. </书>
  13. </书架>

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

  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. }

结果:

  1. <书架>
  2.  
  3. <书>
  4.  
  5. <书名>
  6. name=xxxxx
  7. Java高级
  8. </书名>
  9.  
  10. <作者>
  11. 武陟县
  12. </作者>
  13.  
  14. <价格>
  15. 200元
  16. </价格>
  17.  
  18. </书>
  19.  
  20. <书>
  21.  
  22. <书名>
  23. Java中级
  24. </书名>
  25.  
  26. <作者>
  27. 打火机
  28. </作者>
  29.  
  30. <价格>
  31. 2000元
  32. </价格>
  33.  
  34. </书>
  35.  
  36. </书架>

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

  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中级

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

  1. package XMLParse;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javax.xml.parsers.ParserConfigurationException;
  7. import javax.xml.parsers.SAXParser;
  8. import javax.xml.parsers.SAXParserFactory;
  9.  
  10. import org.apache.commons.lang.Validate;
  11. import org.xml.sax.Attributes;
  12. import org.xml.sax.ContentHandler;
  13. import org.xml.sax.Locator;
  14. import org.xml.sax.SAXException;
  15. import org.xml.sax.XMLReader;
  16. import org.xml.sax.helpers.DefaultHandler;
  17.  
  18. public class Demo4 {
  19.  
  20. public static void main(String[] args) throws Exception {
  21. // 1.创建解析工厂
  22. SAXParserFactory factory = SAXParserFactory.newInstance();
  23. // 2.得到解析器
  24. SAXParser sParser = factory.newSAXParser();
  25. // 3.得到读取器
  26. XMLReader reader = sParser.getXMLReader();
  27. // 4.设置内容处理器
  28. ListBeanHandler listBeanHandler = new ListBeanHandler();
  29. reader.setContentHandler(listBeanHandler);
  30. // 5.读取xml文件
  31. reader.parse("src/Book.xml");
  32. List<Book> list = listBeanHandler.getList();
  33. System.out.println(list);
  34.  
  35. }
  36. }
  37.  
  38. // 读取指定的标签(读取书名)
  39. class ListBeanHandler extends DefaultHandler {
  40.  
  41. private String currentTag; // 记住当前的标签是那个
  42. private List<Book> list = new ArrayList<Book>();
  43. private Book book;
  44.  
  45. @Override
  46. public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  47. currentTag = qName;
  48. if ("书".equals(qName)) {
  49. book = new Book();
  50. }
  51. }
  52.  
  53. @Override
  54. public void characters(char[] ch, int start, int length) throws SAXException {
  55. if("书名".equals(currentTag)){
  56. book.setName(new String(ch, start, length));
  57. }
  58. if("作者".equals(currentTag)){
  59. book.setAuthor(new String(ch, start, length));
  60. }
  61. if("价格".equals(currentTag)){
  62. book.setPrice(new String(ch, start, length));
  63. }
  64. }
  65.  
  66. @Override
  67. public void endElement(String uri, String localName, String qName) throws SAXException {
  68. currentTag = null;
  69. if("书".equals(qName)){
  70. list.add(book);
  71. book=null;
  72. }
  73. }
  74.  
  75. public List<Book> getList() {
  76. return list;
  77. }
  78.  
  79. public void setList(List<Book> list) {
  80. this.list = list;
  81. }
  82.  
  83. }

结果:

aaarticlea/png;base64,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" alt="" />

SAX解析XML文档——(二)的更多相关文章

  1. 使用SAX解析xml文档

    1.首先,在main方法中解析xml文档,具体代码如下: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import ...

  2. Sax解析xml文档

    测试的xml数据: <?xml version="1.0" encoding="utf-8" ?> <note> <to>G ...

  3. Java高级特性 第14节 解析XML文档(2) - SAX 技术

    一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...

  4. 浅谈用java解析xml文档(二)

    上一文中总结了dom解析xml文档的方式,本文开始总结使用SAX解析xml 的方式及它的优缺点! SAX(Simple API for XML),是指一种接口,或者一个软件包. 首先我们应该知道SAX ...

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

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

  6. 四种生成和解析XML文档的方法详解

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

  7. Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术

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

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

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

  9. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

随机推荐

  1. 【 HDU 4936 】Rainbow Island (hash + 高斯消元)

    BUPT2017 wintertraining(15) #5B HDU - 4936 2014 Multi-University Training Contest 7 F 题意 直接看官方的题意和题解 ...

  2. mysql中存储过程

    存储过程procedure 存储过程,其本质还是函数——但其规定:不能有返回值: 定义形式: 说明: 1,in:用于设定该变量是用来“接收实参数据”的,即“传入”:默认不写,就是in 2,out:用于 ...

  3. [luogu4265][USACO18FEB]Snow Boots silver

    题目大意 求出最少需要丢去多少双靴子才能到达终点. 解法 解法一: 看到数据的范围,非常清楚\(O(n^3)\)能过掉所有的数据,那么我们就果断暴力. 解法二: 比较容易会想到用DP做,我一开始定义\ ...

  4. CF1114D Flood Fill(DP)

    题目链接:CF原网 题目大意:$n$ 个方块排成一排,第 $i$ 个颜色为 $c_i$.定义一个颜色联通块 $[l,r]$ 当且仅当 $l$ 和 $r$ 之间(包括 $l,r$)所有方块的颜色相同.现 ...

  5. 超越LLMNR /NBNS欺骗 - 利用Active Directory集成的DNS

    利用名称解析协议中的缺陷进行内网渗透是执行中间人(MITM)攻击的常用技术.有两个特别容易受到攻击的名称解析协议分别是链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBNS).攻击者可以 ...

  6. poj2386(简单的dfs/bfs)

    题目链接:http://poj.org/problem?id=2386 Description Due to recent rains, water has pooled in various pla ...

  7. ffmpeg 在ubuntu上编译环境搭建和开发

    步骤如下: 1. 下载 官网永远是王道,呵呵:http://ffmpeg.org/download.html 或者 svn checkout svn://svn.mplayerhq.hu/ffmpeg ...

  8. Java: 在不同windows主题下,JFrame窗口设置最佳高度的解决方案

    //设置窗口的大小,无论使用怎样的windows主题,都能灵活的应对,显示合适的窗口大小,一定要在JFrame.setVisible(true)之前调用, //替代传统的frame.setSize(w ...

  9. Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  10. 用Java实现几种常见的排序算法

    用Java语言实现的各种排序,包括插入排序.冒泡排序.选择排序.Shell排序.快速排序.归并排序.堆排序.SortUtil等. 插入排序: package org.rut.util.algorith ...