Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / 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>