sax解析xml文件(三)

来源:互联网 发布:巫师3优化指南 编辑:程序博客网 时间:2024/05/01 12:22

在实际开发中,我们经常需要将数据库的一条记录,封装成bean,然后存储到集合里面.

那么,我们也可以利sax 将xml文件中的结点封装到bean里,然后存储到集合里.下面以前面两篇中的users.xml为例,总结下

xml文件users.xml如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3.     <user id="001">
  4.         <username>james</username>
  5.         <password>javajsp</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>

先设计好bean实体,代码如下:

  1. package org.james.pojo;
  2. public class UserInfo {
  3.     private String username;
  4.     private String password;
  5.     private String id;
  6.     public String getUsername() {
  7.         return username;
  8.     }
  9.     public void setUsername(String username) {
  10.         this.username = username;
  11.     }
  12.     public String getPassword() {
  13.         return password;
  14.     }
  15.     public void setPassword(String password) {
  16.         this.password = password;
  17.     }
  18.     public String getId() {
  19.         return id;
  20.     }
  21.     public void setId(String id) {
  22.         this.id = id;
  23.     }
  24. }

创建DefaultHandler,依然,利用sax解析xml和stack结构相似的技巧.代码如下:

  1. package org.james.sax.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Stack;
  5. import org.james.pojo.UserInfo;
  6. import org.xml.sax.Attributes;
  7. import org.xml.sax.SAXException;
  8. import org.xml.sax.helpers.DefaultHandler;
  9. public class AllUserHandler extends DefaultHandler {
  10.     private List<UserInfo> list=new ArrayList<UserInfo>();
  11.     private UserInfo uiobj;
  12.     private Stack<String> sta=new Stack<String>();
  13.     @Override
  14.     public void characters(char[] ch, int start, int length)
  15.             throws SAXException {
  16.         if(!sta.empty()){
  17.             String name=sta.peek();
  18.             if("username".equals(name)){
  19.                 uiobj.setUsername(new String(ch,start,length));
  20.             }else if("password".equals(name)){
  21.                 uiobj.setPassword(new String(ch,start,length));
  22.             }
  23.         }
  24.     }
  25.     @Override
  26.     public void endElement(String uri, String localName, String name)
  27.             throws SAXException {
  28.         if("username".equals(name)){
  29.             sta.pop();
  30.         }else if("password".equals(name)){
  31.             sta.pop();
  32.         }else if("user".equals(name)){
  33.             list.add(uiobj);
  34.             uiobj=null;
  35.             sta.pop();
  36.         }
  37.     }
  38.     @Override
  39.     public void startElement(String uri, String localName, String name,
  40.             Attributes attributes) throws SAXException {
  41.         if(attributes!=null){
  42.             String id=attributes.getValue("id");
  43.             if(id!=null){
  44.                 uiobj=new UserInfo();
  45.                 uiobj.setId(id);
  46.             }
  47.         }
  48.         if("user".equals(name)){
  49.             sta.push(name);
  50.         }else if("username".equals(name)){
  51.             sta.push(name);
  52.         }else if("password".equals(name)){
  53.             sta.push(name);
  54.         }
  55.     }
  56.     public List<UserInfo> getList() {
  57.         return list;
  58.     }
  59.     
  60. }

测试类,沿用UserService.稍作修改.如下:

  1. package org.james.sax;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.List;
  5. import javax.xml.parsers.ParserConfigurationException;
  6. import javax.xml.parsers.SAXParser;
  7. import javax.xml.parsers.SAXParserFactory;
  8. import org.james.pojo.UserInfo;
  9. import org.james.sax.util.AllUserHandler;
  10. import org.james.sax.util.IsExistedUserHandler;
  11. import org.james.sax.util.ValidateLoginHandler;
  12. import org.xml.sax.SAXException;
  13. public class UserService {
  14.     private static InputStream IN =UserService.class.getClassLoader().getResourceAsStream("users.xml");
  15.     private SAXParser saxParser;
  16.     public UserService(){
  17.         try {
  18.             saxParser=SAXParserFactory.newInstance().newSAXParser();
  19.         } catch (ParserConfigurationException e) {
  20.             e.printStackTrace();
  21.         } catch (SAXException e) {
  22.             e.printStackTrace();
  23.         }
  24.     }
  25.     public boolean isExistedUser(String id){
  26.         IsExistedUserHandler ieuh=new IsExistedUserHandler (id);
  27.         try {
  28.             saxParser.parse(IN, ieuh);
  29.         } catch (SAXException e) {
  30.             System.out.println(e.getMessage());
  31.             return true;
  32.         } catch (IOException e) {
  33.             e.printStackTrace();
  34.         }
  35.         return false;
  36.     }
  37.     public boolean validateLogin(String username,String password){
  38.         ValidateLoginHandler vlh=new ValidateLoginHandler(username,password);
  39.         try {
  40.             saxParser.parse(IN, vlh);
  41.         } catch (SAXException e) {
  42.             System.out.println(e.getMessage());
  43.             return true;
  44.         } catch (IOException e) {
  45.             e.printStackTrace();
  46.         }
  47.         return false;
  48.     }
  49.     public List<UserInfo> getAllUsers(){
  50.         AllUserHandler auh=new AllUserHandler();
  51.         try {
  52.             saxParser.parse(IN, auh);
  53.         } catch (SAXException e) {
  54.             System.out.println(e.getMessage());
  55.         } catch (IOException e) {
  56.             e.printStackTrace();
  57.         }
  58.         return auh.getList();
  59.     }
  60.     public static void main(String... args){
  61.         UserService us=new UserService();
  62.         //System.out.println(us.isExistedUser("002"));
  63.         //System.out.println(us.validateLogin("root", "ro"));
  64.         List<UserInfo> list=us.getAllUsers();
  65.         for(UserInfo ui : list){
  66.             System.out.println("id: "+ui.getId());
  67.             System.out.println("username: "+ui.getUsername());
  68.             System.out.println("password: "+ui.getPassword());
  69.             System.out.println("---------------------------");
  70.         }
  71.     }
  72. }

好了,先说到这儿了...呵呵