java读取xml文档之sax方式
来源:互联网 发布:求解最短路径的算法 编辑:程序博客网 时间:2024/06/05 08:43
sax方式是读取一行处理一行,这样的方式比较节省内存,而且效率很高,尤其处理超大的xml文档时更为明显,如果只是用来读取xml那么sax方式是最佳的,但是它不能用来对xml进行增删改。
xml测试文档:
<?xml version="1.0" encoding="UTF-8"?><商店> <商品> <名称>手机</名称> <价格>1290</价格> <数量>90部</数量> </商品> <商品> <名称>电脑</名称> <价格>11290</价格> <数量>10台</数量> </商品></商店>
Demo1.java
package com.cx.sax;import java.io.IOException;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.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class Demo1 { /** * @param args * @throws SAXException * @throws ParserConfigurationException * @throws IOException */ public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { //处理所有的数据都要封装为一个对象,对象的概念要建立起来 //所以首先要对照这xml文件建立一个bean来封装数据 //这样读取出来的数据就是一个个的对象,然后将对象放入list中。 //1、创建解析工厂类 SAXParserFactory factory = SAXParserFactory.newInstance(); //2、得到解析器 SAXParser sax = factory.newSAXParser(); //3、得到读取器 XMLReader reader = sax.getXMLReader(); //4、设置内容处理器,需要建立一个处理器 GoodsHandler handler = new GoodsHandler(); reader.setContentHandler(handler); //5、读取XML文档 reader.parse("src/test.xml"); List<Goods> list = handler.getGoods(); for(Goods g : list){ System.out.println("名称:"+g.getName()+",价格:"+g.getPrice()+",数量:"+g.getNumber()); } }}//继承默认的处理器可以选择需要的方法进行实现,如果使用接口则必须全部实现所有的方法,比较麻烦。//这里只用到了startElement、characters、endElement三个方法class GoodsHandler extends DefaultHandler{ //初始化商品 private Goods goods; //定义一个tag,保存当前的标签名称 private String tag; //初始化list private List list = new ArrayList(); @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { //首先获得开始标签,判断name是否等于商品 tag = name; if("商品".equals(name)){//这里字符一定要在前变量在后,否则会报空指针的错误,,注意!!! //如果相等,就new出一个goods对象 goods = new Goods(); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { //处理完开始标签就要处理内容了 if("名称".equals(tag)){ //获得名称标签体 String name = new String(ch,start,length); //向对象中添加名称信息 goods.setName(name); } if("价格".equals(tag)){ //获得名称标签体 String price = new String(ch,start,length); //向对象中添加名称信息 goods.setPrice(price); } if("数量".equals(tag)){ //获得名称标签体 String number = new String(ch,start,length); //向对象中添加名称信息 goods.setNumber(number); } } @Override public void endElement(String uri, String localName, String name) throws SAXException { //最后是处理结束标签 if("商品".equals(name)){ list.add(goods); } //一定要制空tag,否则会出错,可以打断点看一下运行的过程就知道为什么要制空了。 tag = null; } //需要返回一个list,所以要添加一个list的get方法 public List getGoods() { return list; }}
Goods.java
package com.cx.sax;public class Goods { private String name; private String price; private String number; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; }}
运行结果控制台界面:
阅读全文
0 0
- java读取xml文档之sax方式
- JAVA读取XML之SAX方式
- java(12)--xml之sax方式解析文档
- JAVA SAX(流读取方式) 读取xml文档 简单列子
- java操作xml文档(二) SAX方式
- Java处理XML文档的SAX方式
- Java创建XML文档的SAX方式
- SAX方式读取XML
- Java解析xml文档之SAX解析
- Java读取XML文件之SAX篇
- 解析XML文档方式之二:sax方式
- JAVA 解析XML之SAX方式
- JAVA解析XML之SAX方式
- SAX方式解析XML文档
- sax方式解析xml文档
- SAX方式读取XML文件
- 用SAX方式在java程序中读取xml文件
- java与xml之SAX解析XML文档
- 易中天读书
- ViewPager动态加载本地图片
- 对程序员非常重要的24个软技能
- Eclipse快捷键
- C++字符输入getchar()和字符输出putchar()
- java读取xml文档之sax方式
- linux系统上搭建FTP服务,使用MYSQL验证用户
- 事件处理-事件流
- 所有的浏览器
- substring和substr的区别
- WINDBG本地调试WIN7
- 【elasticsearch】初识es搜索引擎,单节点安装
- Mat-获取指定行列数据
- OpenGL