> 文档中心 > 使用DOM4j维护XML数据(对XML进行增删查改)

使用DOM4j维护XML数据(对XML进行增删查改)

事先准备:使用DOM4j首先要引入jar包,可以去官网自行下载 放到到项目的src目录下右键 add as library即可
  1. XML文件
<students>    <student> <name sex="">张三</name> <age>20</age> <school>bdqn </school>    </student>    <student type="自考"> <name>李四</name> <age>22</age> <school>bdqn</school>    </student> <student type="自考"> <name>王五</name> <age>20</age> <school>清华</school>    </student></students>
  1. Student类
/** * student类 * 属性:name age school * 方法:showInfo() */public class Student {    private String name;    private String age;    private String school; //省略构造方法及getter/setter方法    //打印学生信息    public void showInfo(){ System.out.println("姓名:"+this.name+"\n年龄:"+this.age+"\n学校:"+this.school); System.out.println("***********");    }}
  1. XML解析类
import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import java.io.*;import java.util.Iterator;/** * 文档解析类 dom4j * 属性: document name age school * 方法:getDom() showXML() */public class stuDom4j {    //新建document对象    Document document=null;    //新建学生属性    private String name,age,school;    //使用dom4j创建dom树    public void getDom(File file){ //创建SAXreader对象 SAXReader reader=new SAXReader(); try {     //解析xml文件,获得dom树     this.document=reader.read(file); } catch (DocumentException e) {     e.printStackTrace(); }    }    //解析XML文档    public void showXML(){ //获取根节点 students Element rootEle = document.getRootElement(); //迭代输出根节点的子节点 student Iterator<Element> itStu = rootEle.elementIterator(); while(itStu.hasNext()){     //获得studnet元素节点     Element stuEle = itStu.next();      //1.根据name标签获得姓名     Iterator<Element> itName = stuEle.elementIterator("name");     while(itName.hasNext()){  //获得name标签元素  Element nameEle = itName.next();  //获得name文本值  this.name= nameEle.getText();     }     //2.根据age标签获得年龄     Iterator<Element> itAge = stuEle.elementIterator("age");     while(itAge.hasNext()){  Element ageEle = itAge.next();  this.age= ageEle.getText();     }     //3.根据school标签获得学校     Iterator<Element> itSchool = stuEle.elementIterator("school");     while(itSchool.hasNext()){  Element schoolEle = itSchool.next();  this.school= schoolEle.getText();     }     //根据获得信息新建学生对象,展示     Student stu=new Student(name,age,school);     stu.showInfo(); }    }    //另存为    public void save(File file){ XMLWriter writer=null; try {     //创建writer对象      writer=new XMLWriter(new FileOutputStream(file));      writer.write(document); } catch (UnsupportedEncodingException | FileNotFoundException e) {     e.printStackTrace(); } catch (IOException e) {     e.printStackTrace(); } finally {     try {  //关闭  writer.close();     } catch (IOException e) {  e.printStackTrace();     } } System.out.println("保存成功");    }    //添加    public void add(){ //查找根节点 Element root=document.getRootElement(); //创建新的student节点 Element stuEle = root.addElement("student"); //student节点属性 stuEle.addAttribute("type","保送"); //1.子节点 name Element nameEle = stuEle.addElement("name"); //name文本值 nameEle.addText("王五"); //2.子节点 age Element ageEle = stuEle.addElement("age"); //age文本值 ageEle.addText("20"); //3.子节点 school Element schoolEle = stuEle.addElement("school"); //name文本值 schoolEle.addText("清华"); System.out.println("添加成功");    }    //修改    public void modfiy()throws Exception{ //查找根节点 Element root=document.getRootElement(); //遍历根节点下的student节点 Iterator<Element> itStudent = root.elementIterator(); while (itStudent.hasNext()){     //转换为元素节点     Element stuEle = itStudent.next();     if (stuEle.attributeValue("type")!=null) {  //判断  if(stuEle.attributeValue("type").equals("保送")){      //修改      stuEle.attribute("type").setValue("自考");  }     }     Iterator<Element> itName = stuEle.elementIterator("name");     while (itName.hasNext()) {  Element nameEle = itName.next();  if(nameEle.getText().equals("张三")){      nameEle.addAttribute("sex","男");  }     } } System.out.println("修改成功");    }    //删除    public void delete(){ //根节点 Element root = document.getRootElement(); //遍历studen节点 Iterator<Element> itStu = root.elementIterator(); while (itStu.hasNext()) {     Element stuEle = itStu.next();     if (stuEle.attributeValue("type")!=null) {  if(stuEle.attributeValue("type").equals("保送")){      //通过父节点删除      stuEle.getParent().remove(stuEle);  }     } } System.out.println("删除成功");    }}
  1. 测试类
import java.io.File;/** * 测试类 */public class stuDom4jTest {    public static void main(String[] args) throws Exception { stuDom4j stuDom4j=new stuDom4j(); File file=new File("src/exam2/Student.xml");  //xml文档所在相对地址 //方法调用 stuDom4j.getDom(file); stuDom4j.showXML();stuDom4j.add(); stuDom4j.modfiy(); stuDom4j.delete(); stuDom4j.save(file);    }}