代码改变世界

Dom4J的应用

2012-04-12 23:12  党飞  阅读(184)  评论(0)    收藏  举报

Dom4J是目前读取xml文件最常用的方式。

下面介绍一个Dom4J的应用例子:

建一个工具里

实现Xml文件的加载和保存

public class Dom4JDomUtil {
 public static Document getDocument() throws Exception{
  SAXReader reader = new SAXReader();
  return reader.read(new File("src/exam.xml"));
 }
 public static void write2xml(Document document) throws Exception{
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("UTF-8");
  XMLWriter writer = new XMLWriter(new FileOutputStream("src/exam.xml"), format);
  writer.write(document);
  writer.close();  
 }
}

dom4j具体实现:

public class StudentDao1 {
 /**
  * 保存学生信息
  *
  * @param student数据
  * @return 成功返回true
  * <student idcard="111" examid="222">
  <name>张三</name>
  <location>沈阳</location>
  <grade>89</grade>
 </student>
  */
 public boolean saveStudent(Student student) {
  boolean result = false;
  try{
   Document document = Dom4JDomUtil.getDocument();
   Element root = document.getRootElement();
   Element element = root.addElement("student");
   element.addAttribute("examid", student.getExamid());
   element.addAttribute("idcard", student.getIdcard());
   element.addElement("name").setText(student.getName());
   element.addElement("location").setText(student.getLocation());
   element.addElement("grade").setText(student.getGrade()+"");
   Dom4JDomUtil.write2xml(document);
   result = true;
  }catch(Exception e){
   //异常转义,不能掉链子
   throw new RuntimeException(e);
  }
  return result;
 }

 public boolean deleteStudent(String name) {
  boolean result = false;
  
  try{
   Document document = Dom4JDomUtil.getDocument();
   String xpath = "//name";
   List<Node> list = document.selectNodes(xpath);
   for(int i = 0 ;i < list.size();i++)
   {
    Node node = list.get(i);
    if(node.getText().equals(name.trim()))
    {
     node.getParent().getParent().remove(node.getParent());
     Dom4JDomUtil.write2xml(document);
     result=true;
    }
   }
  }catch(Exception e)
  {
   System.out.println("服务器忙");
  }
  return result;
 }
 /**
  * 根据准考证号查询学生信息
  * @param examid
  * @return 如果没有对应学生信息,返回null
  */
 public Student queryStudent(String examid){  
  Student student = null;
  try{
   Document document = Dom4JDomUtil.getDocument();
   String xpath = "//student[@idcard='"+examid+"']";
   Node node = document.selectSingleNode(xpath);
   if(node!=null)
   {
    Element element = (Element)node;
    student = new Student();
    student.setExamid(element.attributeValue("examid"));
    student.setIdcard(element.attributeValue("idcard"));
    student.setName(element.elementText("name"));
    student.setLocation(element.elementText("location"));
    student.setGrade(Float.parseFloat(element.elementText("grade")));
   }
   else{
    System.out.println("node is null.");
   }
   
  }catch(Exception e)
  {
   System.out.println("服务器很忙");
  }
  
  return student;
 }
}