歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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的函數   被覆蓋的函數默認情況下,不執行任何操作。
Copyright © Linux教程網 All Rights Reserved