SAX解析XML文档——(二)
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,iVBORw0KGgoAAAANSUhEUgAAA1wAAAAZCAIAAACq+rjRAAAG0UlEQVR4nO2dy7HrKBCGScsOSOlYIUwUWk0Ik4FWs5kQZstdSJahX7z0QPb/1a1bxzRI0DS/GuE6x/373//bv+nvfzzojGlwzjk3TKffeX49xNtq5Zexuujxmpuu0Tim+fXYrjANjd05m/bhF9/u9Xp04KM1djaqvLCL9/rxSTHdKQJoZhruGIlgBxySQqBwm6SwF+bX451bQE8trtvo9At8AgDoACSFAAAAAABASQr/AgAAAAAAvwTeFAIAAAAAABwfAwAAAAAAJIUAAAAAAMAjKQQAAAAAAB5JIQAAAAAA8FlJ4Tw+2361aybz+HTPsebXu53VQ3Ay04AJ3YlpcK5yefVP+BuoO4wXKBsgQNl246uVzcAQvUY9zEwKhSvv8qcA6H3qpbPfFRYK+5nq7pyrMF2DopHXSmeOl8Q6TuKADpZwlnQGssDuZtisZmU33+VPi0DZcoCypelD2Yrccif3+jsr2+GiVxllbUnhp3gamifmW6UzZB6fx4mBmIuIecnyc0eJSwfSyV0R/k8qhK3ESyVLvpJwIc7jM5KEUCGITTflBHPAfkkhlK2QQ5WNYKwmKJuIKGKaZ5Lu9YoYfjG7K9spondxUrhDlEM6z0HLaSCdhFABtY9aptjRY+kqolinizswGqZSjkgKoWxZ9JAUQtk0uAeMEsN1vA6UrUrZzhG9a5NCNqboZCEWRM0U+WmtlCeleg+f4xy8o43rhKdE0X2Hcbs5/4Okbcf1wtyr3YjrkRcWYivvfSoj0RIdv9fyVjqmPWjZCVTUbqn2qZMXSOvEB12pW23OFETuQK2hVq0UK56NIasLYEFfqY3fTAljmGhguLoNUzEHJIVQtjyOVjans1UIf3BQtvfYua98eVJILiJWrubnlO0k0bskKZTC/W2KZfVtNkybo+jr2SR2D1dLrD3z+CTB9cngnXuO8/ZD4NlY0MJP9GtI2hRTSdS6IXQ3vrPSyqcyEqIO+67txHCMty/GflqZQSOQ3s3Wz4Hv1GnixQTPHjbOTArFKzQSeyMOCXXIUWvmYho8GzuFerjs15/XrwBN70sapmIO+U4hlC17ug9UNqckNI5lLbycdbac2yrbAneCUWK47iD3/pyynSR6Fx8fU/WJGsSiKJvCxL40Y24+4I7VkXQ12vuxDUeZz+23xNH1QqEwz59IL3hgZ65tsWYLYcfqpVNsZQYSffdQcnqnPXt8nAXaTs6R4Aosp6WHLLhYd0xzqK9SF3+BZhqfXCV0k+hkI6qPOT6GsmX39Ehl09aXuEg9lC0mqUi2fG3lmye5n1v4NWU7S/QuTgothfnYzBldjFPpZjq7h/FH9nY/LZ3STqJVOpVuRF3hbjNapcmR1FrUjh0gnbo0NOQGRc8bsU7hki5Aclr4tLCHLNTQG7WF+tJaCHNJ3A3TG8PhyTFWAGUr1pTjlU2LgZyf+cdy7q1sXH80h7jUAUj4g3GdIn5O2U4Svb6Swtr99HOcWS6eplg66TFO3n464X2K9uaZHJ3oX095fybFaish2mNIHR8vb9+6wq3hnL6fFifKmibiH59KCkkd7rpd5JL23tpPV0mnvM4aQn0Otr/6rYLpMkwre+hjAVA2cqvLlc3nfacQysaniXhpQ3OIKH283NC9Cn5P2c4RvYuTwmiQ0xA6Lwpzw0SDP384ddK5mcL035LOxBGJ3rshdAzZHcjdCLs8DMJmWmplr0/R6qT8Jrp9wUPMGk5oWxcf229xzxqCawRS3VoQnSCuTPIo4q20hoRC91orrk462cOOWMr1RNZNdqv46oZpoVEfd/QzlC3u3UnK5rPfCJJyKNtCZlKYdGxmUghlazEt3DYpDBBSdcWmmYS9ZuaQKg5ZwtOA5WQnQzpJu+z+BSMm9bVuxHYa3EorkrVsbIXbBYjJa2FXurit4URO4DMWNw0eNfouXI2xvZPC7X/itLBOaclnANnutVacPmRh/8seWtzzzJLjUXbEFjcLzcY6MMTRJ55GxmuZnfwMZdOccaSyEaSp/5gWEpV/Sdn88UkhrQxlazO5dtFLmCzqk8KO6L+HpyCGDl+9uQvb+4rzrvvilMxv+ygKq1Yowu5Z5t59DkdvhehezaR76LZhDGWTkKYeymZhrKOKEv58YTWhbPXsJHq2yewAksKvIQwdkovwpMTOIBf0V+bfhp63rVbPHKVVNm5BSkrd+2vSaUyHkWRzD904jKFsEvbSg7IRxF1upprl1OSFULZq9hK9lMnsQ15S+KbPmeu/h/ej9HwFFFHjXkinRniQJJ3o3jaMoWz7c/OQ6B0o20noomeZcshICgEAAAAAwLeDpBAAAAAAAPg/AiSjxw6BLAsAAAAASUVORK5CYII=" alt="" />
SAX解析XML文档——(二)的更多相关文章
- 使用SAX解析xml文档
1.首先,在main方法中解析xml文档,具体代码如下: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import ...
- Sax解析xml文档
测试的xml数据: <?xml version="1.0" encoding="utf-8" ?> <note> <to>G ...
- Java高级特性 第14节 解析XML文档(2) - SAX 技术
一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用S ...
- 浅谈用java解析xml文档(二)
上一文中总结了dom解析xml文档的方式,本文开始总结使用SAX解析xml 的方式及它的优缺点! SAX(Simple API for XML),是指一种接口,或者一个软件包. 首先我们应该知道SAX ...
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- 四种生成和解析XML文档的方法详解
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- 大杂烩 -- 四种生成和解析XML文档的方法详解
基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
随机推荐
- mvc 验证登录
很多时候,我们需要多个页面验证用户是否登录 有2中方法. 一种是继承 Attrbuite属性,添加验证,这个可以网上搜索. 我一般使用下面的方式 创建BaseWebController继承Contro ...
- Hibernate表关系03
一. 一对多映射 1.基本应用 1.1 准备项目 创建项目:hibernate-02-relation 引入jar,同前一个项目 复制实体(客户).映射.配置.工具类 1.2 创建订单表 表名: t_ ...
- LOJ 2664. 「NOI2013」向量内积 解题报告
#2664. 「NOI2013」向量内积 两个 \(d\) 维向量 \(A=[a_1, a_2 ,...,a_d]\) 与 \(B=[b_1 ,b_2 ,...,b_d]\) 的内积为其相对应维度的权 ...
- 单片机如何产生PWM信号
用89C52产生控制二相步进电机的程序,用PWM信号控制步进电机 用普通I/O口采用软件定时器中断可以模拟PWM输出 /*采用6MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号* ...
- google gson
发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson. 经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实 ...
- MyEclipse上有main函数类运行报错:Editor does not contain a main type
MyEclipse下有main函数类运行报错:Editor does not contain a main type 出现这种问题的原因是,该java文件所在的包没有被MyEclipse认定为源码包. ...
- hiho一下 第144周(机会渺茫)解题报告及拓展
题目1 : 机会渺茫 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在追求一名学数学的女生小Z.小Z其实是想拒绝他的,但是找不到好的说辞,于是提出了这样的要求: ...
- 代码大片出现报错,请重新编译——Clean
工作空间中项目莫名大片报错,可能是各种意外原因导致的代码编译错误,可以选 菜单栏的 Project,Clean一下全部项目,系统会自动重新编译所有项目,有时会有奇效.
- springboot的起步依赖
加载自动配置的方式2: springboot读取配置文件的方式: 1.读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或applicatio ...
- eclipse卸载自带maven
1.在eclipse的安装目录下,找到 features和plugins文件夹,删除这两个文件夹下maven对应的jar和文件夹(windows用户建议用如下搜索:*maven*和*m2e*) 2 ...