java读取xml和xml写入数据

来源:互联网 发布:linux 解压包指定目录 编辑:程序博客网 时间:2024/05/16 17:05
  1. package cn.itcast.usermng.dao;  
  2.   
  3. import java.io.PrintWriter;  
  4. import java.io.Writer;  
  5.   
  6. import org.dom4j.Document;  
  7. import org.dom4j.Element;  
  8. import org.dom4j.io.OutputFormat;  
  9. import org.dom4j.io.SAXReader;  
  10. import org.dom4j.io.XMLWriter;  
  11.   
  12. import cn.itcast.usermng.domain.User;  
  13.   
  14. /** 
  15.  * 持久层(数据层) 
  16.  *  
  17.  * 用来访问xml文件! 
  18.  * @author cxf 
  19.  *  
  20.  * 某一实现类! 
  21.  */  
  22. public class UserDaoImpl implements UserDao {  
  23.     /** 
  24.      * 插入对象到xml中 
  25.      * @param form 
  26.      */  
  27.     public void addUser(User form) {  
  28.         /* 
  29.          * 1. 得到Document 
  30.          * 2. 得到root元素 
  31.          * 3. 要把User对象转换成Element元素 
  32.          * 4. 把user元素插入到root元素中 
  33.          * 5. 回写document 
  34.          */  
  35.         try {  
  36.             /* 
  37.              * 1. 得到Docuembnt 
  38.              */  
  39.             // 创建解析器  
  40.             SAXReader reader = new SAXReader();  
  41.             // 调用读方法,得到Document  
  42.             Document doc = reader.read("F:/users.xml");  
  43.               
  44.             /* 
  45.              * 2. 得到根元素 
  46.              */  
  47.             Element root = doc.getRootElement();  
  48.             /* 
  49.              * 3. 完成添加元素,并返回添加的元素! 
  50.              * 向root中添加一个名为user的元素!并返回这个元素 
  51.              */  
  52.             Element userElement = root.addElement("user");  
  53.             // 设置userElement的属性!  
  54.             userElement.addAttribute("username", form.getUsername());  
  55.             userElement.addAttribute("password", form.getPassword());  
  56.             userElement.addAttribute("age", String.valueOf(form.getAge()));  
  57.             userElement.addAttribute("gender", form.getGender());  
  58.               
  59.             /* 
  60.              * 回写 
  61.              * 注意:创建的users.xml需要使用工具修改成UTF-8编码! 
  62.              * Editplus:标记列--> 重新载入为 --> UTF-8 
  63.              */  
  64.               
  65.             // 创建目标输出流,它需要与xml文件绑定  
  66.             Writer out = new PrintWriter("F:/users.xml""UTF-8");  
  67.             // 创建格式化器  
  68.             OutputFormat format = new OutputFormat("\t"true);  
  69.             format.setTrimText(true);//先干掉原来的空白(\t和换行和空格)!  
  70.               
  71.             // 创建XMLWrtier  
  72.             XMLWriter writer = new XMLWriter(out, format);  
  73.               
  74.             // 调用它的写方法,把document对象写到out流中。  
  75.             writer.write(doc);  
  76.               
  77.             // 关闭流  
  78.             out.close();  
  79.             writer.close();  
  80.               
  81.         } catch(Exception e) {  
  82.             // 把编译异常转换成运行异常!  
  83.             throw new RuntimeException(e);  
  84.         }  
  85.     }  
  86.       
  87.     /** 
  88.      * 按用户名进行查询 
  89.      * @param username 
  90.      * @return 
  91.      */  
  92.     public User findByUsername(String username) {  
  93.         /* 
  94.          * 1. 得到Docuemnt 
  95.          * 2. 给出xpath表达式 
  96.          * 3. 调用docuemnt的方法进行xpath查询,得到Element 
  97.          * 4. 把Element转换成User对象,返回! 
  98.          */  
  99.         try {  
  100.             /* 
  101.              * 1. 得到Docuembnt 
  102.              */  
  103.             // 创建解析器  
  104.             SAXReader reader = new SAXReader();  
  105.             // 调用读方法,得到Document  
  106.             Document doc = reader.read("F:/users.xml");  
  107.               
  108.             /* 
  109.              * 2. 准备xpath 
  110.              *  //开头表示没有深的限制,可以在文档查询子元素、子元素的子元素! 
  111.              *  []中放的叫谓语,其实就是查询条件 
  112.              *  @username表示username属性,限定其必须等于方法参数username 
  113.              */  
  114.             String xpath = "//user[@username='" + username + "']";  
  115.             /* 
  116.              * 3. 调用document方法完成查询 
  117.              */  
  118.             Element userEle = (Element)doc.selectSingleNode(xpath);  
  119.             if(userEle == null) {  
  120.                 return null;  
  121.             }  
  122.             /* 
  123.              * 4. 把元素转换成User类的对象,然后返回 
  124.              */  
  125.             User user = new User();  
  126.             // 获取元素的username属性值,赋给对象的username属性  
  127.             user.setUsername(userEle.attributeValue("username"));  
  128.             user.setPassword(userEle.attributeValue("password"));  
  129.             user.setAge(Integer.parseInt(userEle.attributeValue("age")));  
  130.             user.setGender(userEle.attributeValue("gender"));  
  131.               
  132.             return user;  
  133.         } catch(Exception e) {  
  134.             throw new RuntimeException(e);  
  135.         }  
  136.     }  
  137. }  
原创粉丝点击