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

XML文档:

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

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

 package XMLParse;

 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; public class Demo1 { public static void main(String[] args) throws Exception {
// 1.创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 2.得到解析器
SAXParser sParser = factory.newSAXParser();
// 3.得到读取器
XMLReader reader = sParser.getXMLReader();
// 4.设置内容处理器
reader.setContentHandler(new ListHandler());
// 5.读取xml文件
reader.parse("src/Book.xml");
}
} // 得到xml文档的所有内容
class ListHandler implements ContentHandler { // 处理开始标签
@Override
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
System.out.println("<" + qName + ">");
// 常用的循环方式 读取属性
for (int i = 0;atts!=null && i < atts.getLength(); i++) {
String attName = atts.getQName(i);
String attValue = atts.getValue(i);
System.out.println(attName+"="+attValue);
}
} // 处理内容
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
System.out.println(new String(ch, start, length));
} // 处理结束标签
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("</" + qName + ">"); } @Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub } @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub } @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub } @Override
public void startPrefixMapping(String prefix, String uri) throws SAXException {
// TODO Auto-generated method stub } @Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub } @Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub } @Override
public void processingInstruction(String target, String data) throws SAXException {
// TODO Auto-generated method stub } @Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub } }

结果:

<书架>

<书>

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

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

 package XMLParse;

 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 Demo3 { public static void main(String[] args) throws Exception {
// 1.创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 2.得到解析器
SAXParser sParser = factory.newSAXParser();
// 3.得到读取器
XMLReader reader = sParser.getXMLReader();
// 4.设置内容处理器
reader.setContentHandler(new TagValueHandler_1());
// 5.读取xml文件
reader.parse("src/Book.xml");
}
} //读取指定的标签(读取书名)
class TagValueHandler_1 extends DefaultHandler{ private String currentTag; //记住当前的标签是那个
private int needNum = 2; //记住需要第几个
private int currentNum; //记住当前是第几个 @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if("书名".equals(qName)){
currentTag="书名";
currentNum++;
}
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
currentTag=null;
} @Override
public void characters(char[] ch, int start, int length) throws SAXException {
if("书名".equals(currentTag)&&needNum==currentNum){
System.out.println(new String(ch,start,length));
}
} }

结果:

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; @Override
public 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));
}
} @Override
public 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;
} }

结果:

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. 设计模式【PHP案例】

    内容来源: 波客 菜鸟教程 策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对 ...

  2. pipreqs 组件

    作用 帮助你查询所有需要用的组件 安装 pip install pipreqs   使用 """ 切换到项目的路径下 执行查询当前文件下所需要的所有的组件 会生成一个 r ...

  3. JavaScript 数据类型检测总结

    JavaScript 数据类型检测总结 原文:https://blog.csdn.net/q3254421/article/details/85483462 在js中,有四种用于检测数据类型的方式,分 ...

  4. 值得Python小白学习的书 简单推荐几本吧

    于我个人而言,我很喜欢Python,当然我也有很多的理由推荐你去学python.我只说两点.一是简单,二是写python薪资高.我觉得这俩理由就够了,对不对.买本书,装上pycharm,把书上面的例子 ...

  5. [poj2528]Mayor's posters

    题目描述 The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campa ...

  6. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  7. 关于:HTTP Header -> Content-Type: text/plain Cache-Control: no-cache IE浏览器弹出错误下载对话

    下午遇到一个很奇怪的现象,一个网址: http://192.168.1.3/login?action=a&fr=b.com 注意网址后面的参数形式,action参数在前,最后一个参数值的尾部含 ...

  8. 跟我一起学习vue2(学习工程目录)[三]

    查看生成的my-project的工程目录 首先看 build是最终发布的代码存放位置. 我查看了一下目录,里面都是Js文件 config目录里面主要是配置目录,包括端口号.如果开的项目多,可以进入in ...

  9. 使用babel将ES6编译成ES5

    现在ES6已经非常成熟了,我的需求很明确,就是只需要将ES6编译成ES5. 项目目录为 借鉴的博客链接为https://blog.csdn.net/suwu150/article/details/77 ...

  10. CentOS 7使用yum安装MYSQL

    来源:https://typecodes.com/linux/yuminstallmysql5710.html wget -i http://dev.mysql.com/get/mysql57-com ...