Welcome 微信登录

首页 / 操作系统 / Linux / Android基础教程:学习SAX解析

上次学习的是DOM解析见  天气预报Dom解析 见 http://www.linuxidc.com/Linux/2011-12/49439.htm

这次我们来了解一下SAX是什么情况! 相对于DOM来说SAX在平时要用的多一下。在上次DOM学习中,我们也看见了,解析DOM,循环用的很多。那个XML简单,DOM树层次不深,说通俗点就像for循环一样嵌套的不多。如果很深的话用SAX就要方便的多了....  在写上次程序的时候,我是边看xml 边写代码,需要看仔细些,我眼睛都看花了(可能是我变量名没定义好),另外定义那个变量时也不好弄 遍历时需要中间变量稍多些, 而且都是差不多意思差不多的变量......     我们直接来看一下实例:books.xml
  1. <?xml version="1.0" encoding="utf-8"?>    
  2.     <books  count="3"    
  3.         xmlns="http://test.org/books">    
  4.         <!--books"s comment-->    
  5.         <book>  
  6.             <id>1</id>    
  7.             <name>Thinking in JAVA</name>    
  8.         </book>    
  9.         <book>  
  10.             <id>2</id>     
  11.             <name>Core JAVA2</name>    
  12.         </book>    
  13.         <book>    
  14.             <id>3</id>  
  15.             <name>C++ primer</name>    
  16.         </book>  
  17.         <book>    
  18.             <id>4</id>  
  19.             <name>数据结构(严蔚敏)</name>    
  20.         </book>  
  21.     </books>  
  22.      
关于接下来要上的实例 我简单说一下,这次需要解析的是上面xml文件。 我们需要把xml文件中所有书的信息摘取下来,最后统一输出。类 book.java  用于保存一本书的信息 这里为了简单,xml文件就只是简单写了个ID,name 当然还有价钱等其他信息....
  1. public class Book  
  2. {  
  3.     private int id;  
  4.     private String name;  
  5.     public int getId()  
  6.     {  
  7.         return id;  
  8.     }  
  9.     public void setId(int id)  
  10.     {  
  11.         this.id = id;  
  12.     }  
  13.     public String getName()  
  14.     {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name)  
  18.     {  
  19.         this.name = name;  
  20.     }  
  21.       
  22. }  
类XmlHandler.java  负责处理,管理xml保存书籍信息..
  1. import java.util.ArrayList;  
  2. import org.xml.sax.Attributes;  
  3. import org.xml.sax.SAXException;  
  4. import org.xml.sax.helpers.DefaultHandler;  
  5.   
  6.   
  7. public class XmlHandler extends DefaultHandler  
  8. {  
  9.      public ArrayList<Book> books ;  
  10.      private ArrayList<String> strList;  
  11.      private Book book;  
  12.      private StringBuilder sb = new StringBuilder();  
  13.      @Override  
  14.     public void startDocument() throws SAXException  
  15.     {  
  16.         books = new ArrayList<Book>();  
  17.         strList = new ArrayList<String>();  
  18.         super.startDocument();  
  19.     }  
  20.   
  21.     @Override  
  22.     public void endDocument() throws SAXException  
  23.     {  
  24.           
  25.         super.endDocument();  
  26.     }  
  27.   
  28.     @Override  
  29.     public void startElement(String uri, String localName, String qName,  
  30.             Attributes attributes) throws SAXException  
  31.     {  
  32.           
  33.         if(qName.equals("book"))  
  34.         {  
  35.             book = new Book();  
  36.         }  
  37.         super.startElement(uri, localName, qName, attributes);  
  38.     }  
  39.   
  40.     @Override  
  41.     public void endElement(String uri, String localName, String qName)  
  42.             throws SAXException  
  43.     {  
  44.         strList.add(qName);  
  45.           
  46.         if(qName.equals("book"))  
  47.         {  
  48.             books.add(book);  
  49.         }  
  50.         else if(qName.equals("id"))  
  51.         {  
  52.             book.setId(Integer.parseInt(sb.toString().trim()) );  
  53.               
  54.         }  
  55.         else if(qName.equals("name"))  
  56.         {  
  57.             book.setName(sb.toString());  
  58.         }  
  59.           
  60.           
  61.         super.endElement(uri, localName, qName);  
  62.     }  
  63.   
  64.     @Override  
  65.     public void characters(char[] ch, int start, int length)  
  66.             throws SAXException  
  67.     {  
  68.         sb.setLength(0);  
  69.         String str = new String(ch,start,length);  
  70.         sb.append(str);  
  71.         super.characters(ch, start, length);  
  72.     }  
  73.       
  74. }  
上面几个函数都是覆盖类DefaultHandler的函数   被覆盖的函数默认情况下,不执行任何操作。