xml解析之sax解析
来源:互联网 发布:手机淘宝网页版 编辑:程序博客网 时间:2024/06/04 17:53
上节大概举例实现了dom解析,这节来看看sax解析
SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOM解析,PULL解析(Android特有),SAX与DOM不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。
SAX的优点: 1.解析速度快 2.占用内存少SAX的缺点: 1.无法知道当前解析标签(节点)的上层标签,及其嵌套结构,仅仅知道当前解析的标签的名字和属性,要知道其他信息需要程序猿自己编码 2.只能读取XML,无法修改XML 3.无法随机访问某个标签(节点)SAX解析适用场合 4.对于CPU资源宝贵的设备,如Android等移动设备 5.对于只需从xml读取信息而无需修改xml
下面是简单的代码实现:
package xml;import java.io.IOException;import java.util.ArrayList;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.helpers.DefaultHandler;public class SaxParser { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { //1.创建解析工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //2.创建解析器 SAXParser parser=factory.newSAXParser(); //3.解析文档,传入xml文件和自己设计的处理器 parser.parse("resource/Demo1.xml", new Myhandler()); for (int i = 0; i < Myhandler.alist.size(); i++) { System.out.println(Myhandler.alist.get(i)); } }}class Myhandler extends DefaultHandler{ /** * 创建集合,存储数据,这里我们要解析的是xml文件里面书的相关信息,所以要另外建一个类Book * 提供get和set方法 * 在Myhandler这个类中有许多可以重写的方法,这里简单列出三个主要的 * 其他的可以等有机会我再总结,有兴趣可以自己看看 * */ static ArrayList<Book> alist=new ArrayList<Book>(); Book book; String qname; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { this.qname=qName; if("book".equals(qName)){ book=new Book(); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if("title".equals(qname)){ book.setTitle(new String(ch,start,length)); }else if("author".equals(qname)){ book.setAuthor(new String(ch,start,length)); }else if("year".equals(qname)){ book.setYear(new String(ch,start,length)); }else if("price".equals(qname)){ book.setPrice(new String(ch,start,length)); }else if("category".equals(qname)){ book.setCategory(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { this.qname=null; if("book".equals(qName)){ alist.add(book); } } /*@Override public void startDocument() throws SAXException { System.out.println("文档解析开始啦"); } //这两个方法的结果和我预想的不太一样,先注释掉。。。 @Override public void endDocument() throws SAXException { System.out.println("文档解析结束"); }*/}//======这是新建的book类,辅助测试package xml;public class Book { String title; String author; String year; String price; String category; public Book(){ } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public Book(String title, String author, String year, String price, String category) { super(); this.title = title; this.author = author; this.year = year; this.price = price; this.category = category; } @Override public String toString() { return "Book [title=" + title + ", author=" + author + ", year=" + year + ", price=" + price + ", category=" + category + "]"; }}
前面总结部分转载自这篇博客,写的很好!!!
阅读全文
0 0
- 解析xml之--SAX
- 解析xml之--SAX
- 解析xml之--SAX
- XML解析之SAX
- XML 解析之SAX
- XML解析之SAX
- 【xml之SAX解析】
- XML解析之SAX
- 解析XML之SAX
- xml之SAX解析
- xml之sax解析
- xml解析之sax
- XML解析之SAX
- xml解析之SAX
- XML之sax解析
- XML解析之SAX
- xml之SAX解析
- Xml之Sax解析
- CODEVS 1023 青铜
- Java中list集合ArrayList 中contains包含的使用
- Cache 和 Buffer的区别
- 利用Scanner将string转成Map
- 【勤哲应用】勤哲Excel服务器做材料管理系统
- xml解析之sax解析
- tensorflow在训练过程中逐步减少学习率
- android数据存储的五大方式
- 微信小程序--map
- 浅谈区块链技术
- @RequestBody应用,requestbody
- 创建一个的用户
- Java打包jar包和生成API文档
- 欢迎使用CSDN-markdown编辑器