dom4j解析xml

现在有很多工具包可以解析xml文件,但是dom4j无疑是其中较为简单的一种,下面就用一个例子来实际操作一下:

首先得导入dom4j.jar这个夹包(网上一搜一大片)

1.随便在一个地方建立一个user.xml文件,我这儿是建立在d盘根目录下:

 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3. <user username="lisi" password="123"/>
  4. <user username="张三" password="123"/>
  5. <user username="zhangsan" password="123"/>
  6. </users>
<?xml version="1.0" encoding="UTF-8"?>

<users>
	<user username="lisi" password="123"/>
	<user username="张三" password="123"/>
	<user username="zhangsan" password="123"/>
	
</users>


2.对该文件进行模拟查询用户(按姓名查询)和添加用户:

 
  1. package com.easyteam.dao;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStream;
  6. import java.io.OutputStreamWriter;
  7. import java.io.UnsupportedEncodingException;
  8. import org.dom4j.Document;
  9. import org.dom4j.DocumentException;
  10. import org.dom4j.Element;
  11. import org.dom4j.io.OutputFormat;
  12. import org.dom4j.io.SAXReader;
  13. import org.dom4j.io.XMLWriter;
  14. import com.easyteam.domain.User;
  15. public class Userdao {
  16. String path="d://user.xml";
  17. public User findByName(String username){
  18. SAXReader red=new SAXReader();//创建解析器
  19. try {
  20. Document doc=red.read(path);//得到documet对象
  21. Element el=(Element) doc.selectSingleNode("//user[@username='"+username+"']");//查询条件,其中//表示无限深度查询,[]中放入是查询条件
  22. if(el==null) return null;
  23. String attUsername=el.attributeValue("username");//得到username这个属性的值
  24. String attPassword=el.attributeValue("password");
  25. User user=new User();
  26. user.setUsername(attUsername);
  27. user.setPassword(attPassword);
  28. return user;
  29. } catch (DocumentException e) {
  30. throw new RuntimeException(e);
  31. }
  32. }
  33. public void addUser(User user){
  34. SAXReader red=new SAXReader();
  35. try {
  36. Document doc = red.read(path);
  37. Element attroot=doc.getRootElement();//得到根节点
  38. Element userel=attroot.addElement("user");//添加节点
  39. userel.addAttribute("username", user.getUsername());//给新节点赋值
  40. userel.addAttribute("password", user.getPassword());
  41. OutputFormat format=new OutputFormat("\t", true);//设置格式
  42. format.setTrimText(true);//清除原有格式
  43. XMLWriter writer;
  44. try {
  45. writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream(path),"utf-8"),format);//实例化
  46. writer.write(doc);//保存
  47. writer.close();
  48. } catch (Exception e) {
  49. throw new RuntimeException(e);
  50. }
  51. } catch (DocumentException e) {
  52. throw new RuntimeException(e);
  53. }
  54. }
  55. }

3.测试类:

 
  1. package com.easyteam.test;
  2. import org.junit.Test;
  3. import com.easyteam.dao.Userdao;
  4. import com.easyteam.domain.User;
  5. public class UserDaoTest {
  6. @Test
  7. public void testfindByName(){
  8. Userdao dao=new Userdao();
  9. User user= dao.findByName("lisi");
  10. System.out.println(user);
  11. }
  12. @Test
  13. public void testaddUser(){
  14. Userdao dao=new Userdao();
  15. User user=new User();
  16. user.setUsername("张三");
  17. user.setPassword("123");
  18. dao.addUser(user);
  19. }
  20. }  
posted on 2016-06-13 20:43  doAction  阅读(191)  评论(0编辑  收藏  举报