sax解析xml文件(一)

来源:互联网 发布:上古卷轴5脸部数据导入 编辑:程序博客网 时间:2024/06/05 07:33

 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
--------------------

哈哈,说明成功了!

 

原创粉丝点击