sax解析xml文件(一)

 xml一種格式嚴謹,通用,表述數據良好的語言,它有存儲數據的功能,這一點和數據庫相似.

dom和sax是兩種不同的解析xml文件的機制.在解析大型xml文件時,宜選用sax技術.

 

下面以判斷users.xml文件中,是否存在id 爲"003"的用戶爲例,簡要介紹一下sax技術.

首先準備一個xml文件.usrs.xml  代碼如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3.     <user id="001">
  4.         <username>james</username>
  5.         <password>james</password>
  6.     </user>
  7.     <user id="002">
  8.         <username>adu</username>
  9.         <password>adu</password>
  10.     </user>
  11.     <user id="003">
  12.         <username>root</username>
  13.         <password>root</password>
  14.     </user><user id="004">
  15.         <username>lishanli</username>
  16.         <password>lishanli</password>
  17.     </user>
  18. </users>

創建IsExistedUserHandler類,它派生自DefaultHandler.代碼如下:

  1. package org.james.sax.util;
  2. import org.xml.sax.Attributes;
  3. import org.xml.sax.SAXException;
  4. import org.xml.sax.helpers.DefaultHandler;
  5. public class IsExistedUserHandler extends DefaultHandler {
  6.     private String id;
  7.     public IsExistedUserHandler(String id){
  8.         this.id=id;
  9.     }
  10.     @Override
  11.     public void startElement(String url, String localName, String qName,
  12.             Attributes atts) throws SAXException {
  13.         if(atts!=null){
  14.             String userID=atts.getValue("id");
  15.             if(userID!=null){
  16.                 if(userID.equals(id)){//當解析到id屬性與構造函數中的id一樣時,說明,存在該用戶.
  17.                     throw new SAXException("己經存在該用戶!");//由於,sax在解析過程中不能停止,此時卻需要停止,可以採用/拋出異常的方式,終止解析.
  18.                 }
  19.             }
  20.         }
  21.     }
  22.     
  23. }

好了,現在寫一個測試類,測試一下吧

  1. package org.james.sax;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import javax.xml.parsers.ParserConfigurationException;
  5. import javax.xml.parsers.SAXParser;
  6. import javax.xml.parsers.SAXParserFactory;
  7. import org.james.sax.util.IsExistedUserHandler;
  8. import org.xml.sax.SAXException;
  9. public class UserService {
  10.     private static InputStream IN =UserService.class.getClassLoader().getResourceAsStream("users.xml");
  11.     private SAXParser saxParser;
  12.     public UserService(){
  13.         try {
  14.             saxParser=SAXParserFactory.newInstance().newSAXParser();
  15.         } catch (ParserConfigurationException e) {
  16.             e.printStackTrace();
  17.         } catch (SAXException e) {
  18.             e.printStackTrace();
  19.         }
  20.     }
  21.     public boolean isExistedUser(String id){
  22.         IsExistedUserHandler ieuh=new IsExistedUserHandler (id);
  23.         try {
  24.             saxParser.parse(IN, ieuh);
  25.         } catch (SAXException e) {
  26.             System.out.println(e.getMessage());
  27.             return true;
  28.         } catch (IOException e) {
  29.             e.printStackTrace();
  30.         }
  31.         return false;
  32.     }
  33.     public static void main(String... args){
  34.         UserService us=new UserService();
  35.         System.out.println(us.isExistedUser("003"));
  36.     }
  37. }

看看控制檯輸出什麼?

-------------------------------

己經存在該用戶!
true
--------------------

哈哈,說明成功了!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章