XML学习之SAX解析XML文件
来源:互联网 发布:android studio mac 编辑:程序博客网 时间:2024/05/01 19:32
XML学习之SAX解析XML文件
一、SAX解析方式概述
1、Sax解析允许每读取一行文本就解析一行文本的方式对XML文件进行解析。不必等到读取完文件后才开始解析。提高了解析速度。
2、sax采用事件处理方式解析XML文件,利用SAX解析XML文档,涉及两个问他:解析器和事件处理器。
(1)、解析器:解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用 事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
(2)、事件处理器由我们自己编写,这样就可以通过事件处理器中方法的参数来得到SAX解析器解析到的xml数据。
二、使用SAX方式解析XML文档
1、使用SAX解析XML步骤
(1)、使用SAX解析器解析XML文档必须先得到一个SAXParserFactory类。
(2)、使用SAXParserFactory得到SAXParser 解析器
SAXParser parser=SAXParserFactory.newInstance().newSAXParser()
(3)、使用SAXParser 得到XMLReader读取器
XMLReader reder= sp.getXMLReader();
(4)、编写事件处理器
阅读javaSE 的Api:发现在org.xml.sax包中,已经定义了四个解析XML的事件处理器接口,分别是
ContentHandler:接收文档逻辑内容的通知
DTDhandler:接收基本的DTD相关的事件的通知
ErrorHandler:SAX错误处理程序的基本接口
EntityResolver:用来解析实体的基本接口。
编程人员只要实现这几个事件处理器接口就可以获得解析到的xml数据了。
(5)、使用XMLReader读取器设置处理器。
reader.setContentHandler(myHander);
(6)、开始解析
reader.parse("src/book.xml");
2、使用sax方式解析XML文件小程序
下面这个例子用来解析一个XML文件,并将解析到的数据封装到一个javabean中。所使用的xml文件为src\book.xml
(1)、Book.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> <书 出版社="xx出版社"> <书名>JavaWeb开发</书名> <作者>xxx</作者> <价格>68.0</价格> </书> <书 出版社="xx出版社"> <书名>AJAX开发实战</书名> <作者>浩宇</作者> <价格>100</价格> </书></书架>
(2)、定义一个Book类,用来封闭xml中读取到的数据
package cn.itheima.entity;public class Book { private String name; private String author; private String price; private String edtion; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getEdtion() { return edtion; } public void setEdtion(String edtion) { this.edtion = edtion; } public String toString() { return "书名:"+name+";作者:"+author+";出版社:"+edtion+";价格:"+price; }}
(3)、使用sax对XML文件进行解析,将解析到的文件封装到一个List<book>解析中来。
package cn.itheima.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;import cn.itheima.entity.Book;/** * 使得SAX方式得到XML中的某一个元素 * @author Administrator * */public class SAXstu2 { /** * @param args */ public static void main(String[] args) { //得到sax解析器工厂SAXParserFactory spf=SAXParserFactory.newInstance(); //定义一个解析器SAXParser sp=null; //定义一个读取器XMLReader reader=null; List<Book> listBooks=null; try { //得到解析器sp=spf.newSAXParser(); reader=sp.getXMLReader(); MyContentHander mch=new MyContentHander(); reader.setContentHandler(mch); listBooks=mch.getList(); reader.parse("src/book.xml"); for (Book book : listBooks) { System.out.println(book.toString()); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}/** * 声明一个内容处理器来获得所有的书本信息 * @author Administrator * */class MyContentHander extends DefaultHandler{ //声明一个内容处理器来获得所有的书本信息 private List<Book> list=new ArrayList<Book>(); Book book=null; String currentTag=null;//声明一个节点名称,用来 保存当前的节点名称 @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 { if("书".equals(qName)) { list.add(book); book=null; } currentTag=null; } public List<Book> getList() { return list; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("书".equals(qName)) { book=new Book(); book.setEdtion(attributes.getValue("出版社")); }currentTag=qName; }}
- XML学习之SAX解析XML文件
- xml解析之SAX解析xml文件
- Java 解析 XML 文件之 SAX 解析
- xml文件解析之sax解析
- XML文件解析之SAX解析
- 【学习笔记】JAVA之使用SAX解析XML文件
- Android 个人学习笔记之---SAX解析XML文件
- 安卓学习之---SAX方式解析XML文件
- 学习笔记-Java中的xml文件读取之SAX解析
- xml文件解析-SAX
- sax解析xml文件
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析xml文件
- SAX解析xml文件
- C#贪吃蛇
- jstat 详解
- 如何在Web上判断是否已经安装了某个ActiveX控件
- oracle 管理 之 数据恢复 之闪回
- 如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误
- XML学习之SAX解析XML文件
- 异常恢复模型
- Performance tips for Cocos2d for iPhone
- 趣味题 c语言
- Sound on iOS: Best Practices
- 最长重合区间问题
- Hadoop-0.20.0源代码分析(7)http://blog.csdn.net/shirdrn/article/details/4581666
- 系统架构--淘宝网--淘宝网采用什么技术架构来实现网站高负载的
- hdoj 1016 (dfs)