歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

SAX解析XML文檔

SAX采用事件處理器的方式解析XML文檔,利用SAX解析XML文檔,涉及兩個部分:解析器和事件處理器

解析器可以使用JAXP的API進行創建,創建出SAX解析器後,就可以指定解析器去解析某個XML文檔

解析器在采用SAX方式解析某個XML文檔時,它只要解析到XML文檔的一個組成部分,都回去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,會把當前XML文件內容作為方法的參數傳遞給事件處理器

事件處理器有程序員編寫,程序員通過事件處理器中方法的參數,就可以很輕松地得到SAX解析器得到的數據,從而可以決定如何對數據進行處理

通過一個實例體驗一下,本實例通過讀取一個book.xml文檔,將book中內容封裝到一個Book對象中,並將多個Book對象放入LIst中返回,實例代碼如下:

  1. import java.io.IOException; 
  2. import java.util.ArrayList; 
  3. import java.util.List; 
  4. import java.util.concurrent.ConcurrentMap; 
  5.  
  6. import javax.sql.rowset.spi.XmlReader; 
  7. import javax.xml.parsers.ParserConfigurationException; 
  8. import javax.xml.parsers.SAXParser; 
  9. import javax.xml.parsers.SAXParserFactory; 
  10.  
  11. import org.xml.sax.Attributes; 
  12. import org.xml.sax.ContentHandler; 
  13. import org.xml.sax.Locator; 
  14. import org.xml.sax.SAXException; 
  15. import org.xml.sax.XMLReader; 
  16. import org.xml.sax.helpers.DefaultHandler; 
  17.  
  18.  
  19. public class SAXParesXML { 
  20.  
  21.     /** 
  22.      * sax parse 
  23.      * @throws SAXException  
  24.      * @throws ParserConfigurationException  
  25.      * @throws IOException  
  26.      */ 
  27.     public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 
  28.          
  29.         // 創建解析工廠  
  30.         SAXParserFactory factory = SAXParserFactory.newInstance(); 
  31.          
  32.         // 得到解析器  
  33.         SAXParser sp = factory.newSAXParser(); 
  34.          
  35.         // 得到讀取器  
  36.         XMLReader reader = sp.getXMLReader(); 
  37.          
  38.         //設置內容處理器  
  39.         BeanListHandler beanListHandler = new BeanListHandler(); 
  40.         reader.setContentHandler(beanListHandler); 
  41.          
  42.         //讀取xml文檔內容  
  43.         reader.parse("src/book.xml"); 
  44.          
  45.         List<Book> books = beanListHandler.getBooks(); 
  46.          
  47.         //遍歷輸出  
  48.         //...  
  49.     } 
  50.  
  51.  
  52. // 把xml的每一本書封裝到Book對象中,並把多個Book對象封裝到List中返回  
  53. class BeanListHandler extends DefaultHandler { 
  54.  
  55.     private List books = new ArrayList(); 
  56.     private String currentTag; 
  57.     private Book book; 
  58.      
  59.     public List getBooks() { 
  60.         return books; 
  61.     } 
  62.      
  63.     @Override 
  64.     public void startElement(String uri, String localName, String qName, 
  65.             Attributes attributes) throws SAXException { 
  66.         if ("book".equals(currentTag)) { 
  67.             book = new Book(); 
  68.         } 
  69.     } 
  70.  
  71.     @Override 
  72.     public void characters(char[] ch, int start, int length) 
  73.             throws SAXException { 
  74.         if ("name".equals(currentTag)) { 
  75.             book.setName(new String(ch, start, length)); 
  76.         } 
  77.          
  78.         if ("author".equals(currentTag)) { 
  79.             book.setAuthor(new String(ch, start, length)); 
  80.         } 
  81.          
  82.         if ("price".equals(currentTag)) { 
  83.             book.setPrice(new String(ch, start, length)); 
  84.         } 
  85.     } 
  86.      
  87.     @Override 
  88.     public void endElement(String uri, String localName, String qName) 
  89.             throws SAXException { 
  90.         if (qName.equals("book")) { 
  91.             books.add(book); 
  92.             book = null
  93.         } 
  94.          
  95.         currentTag = null
  96.     } 
  97.  

Book類代碼如下:

  1. public class Book { 
  2.     private String name; 
  3.     private String author; 
  4.     private String price; 
  5.      
  6.     public String getName() { 
  7.         return name; 
  8.     } 
  9.     public void setName(String name) { 
  10.         this.name = name; 
  11.     } 
  12.     public String getAuthor() { 
  13.         return author; 
  14.     } 
  15.     public void setAuthor(String author) { 
  16.         this.author = author; 
  17.     } 
  18.     public String getPrice() { 
  19.         return price; 
  20.     } 
  21.     public void setPrice(String price) { 
  22.         this.price = price; 
  23.     } 
  24.      

book.xml文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <bookstore> 
  3.     <book> 
  4.         <name>C++ l</name> 
  5.         <author>Lippman</author> 
  6.         <title>cpp</title> 
  7.     </book> 
  8.     <book> 
  9.         <name>C++ h</name> 
  10.         <author>houjie</author> 
  11.         <title>stl</title> 
  12.     </book> 
  13. </bookstore>
Copyright © Linux教程網 All Rights Reserved