don4j演示---增删改查以及无中生有方法的使用

来源:互联网 发布:进销存记账软件 编辑:程序博客网 时间:2024/06/06 08:30
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;


public class Dom4jdemo {
private static File file = null;

@Test
public void hello() throws DocumentException{
//获取dom对象
Document dom = new SAXReader().read("./xml/users.xml");

//获取根元素
Element root = dom.getRootElement();

//获取子元素
/*
         root.element(name) //获取指定名称的第一个元素
root.elementIterator();//获取所有的子元素---迭代器
root.elementIterator(name);//获取指定名称的所有子元素
root.elements();//获取所有的子元素---java.util.List
root.elements(name) //获取指定名称的所有子元素
root.attributeIterator(); //获取所有的属性
*/
//需求: 把第一个<user>元素的信息获取出来
Element eUser = root.element("user");
String id = eUser.attributeValue("id");
String name = eUser.element("name").getText();
String age = eUser.elementText("age");
System.out.println(id+","+name+","+age);

}

//CRUD--增删改查演示
//查---遍历所有<user>
@Test
public void queryAll() throws DocumentException {
file = new File("./xml/users.xml");
Document dom = new SAXReader().read(file);
Element root = dom.getRootElement();
Iterator<Element> it = root.elementIterator();
while(it.hasNext()){
Element eUser = it.next();
String id = eUser.attributeValue("id");
String name = eUser.element("name").getText();
String age = eUser.elementText("age");
System.out.println(id+","+name+","+age);
}
}

//增---在root下添加一个<hncu>节点
@Test
public void add() throws Exception {
file = new File("./xml/users.xml");
Document dom = new SAXReader().read(file);
Element root = dom.getRootElement();

//创建一个新的元素节点
Element eHncu = root.addElement("cccc");
Element eName = eHncu.addElement("name");
eName.setText("xxxx大学");
Element eAge = eHncu.addElement("age");
eAge.setText("15");
eHncu.addAttribute("id", "666");

///////////////////以下这段专门演示保存功能/////////////////////////////////
//保存---持久化---字符流要刷缓存
//法1:简易方式 ---直接通过Document中的一个write(Writer w)来实现
/*
FileWriter fw = new FileWriter("./xml/users.xml"); 
dom.write( fw ); 
fw.close();
*/

//法2:普通方式---通过XMLWriter中的一个write(dom)
/*2.1用 构造 XMLWriter(OutputStream)
XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
xw.write(dom);
xw.close();
*/
/*2.2用 构造 XMLWriter(Writer)
XMLWriter xw = new XMLWriter( new FileWriter("./xml/users.xml") );
xw.write(dom);
xw.close();
*/

// 2.3用 构造 XMLWriter(OutputStream,OutputFormat) ---以指定的格式输出,可以解决中文乱码
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter xw = new XMLWriter(new FileOutputStream("./xml/users.xml"), format);
xw.write(dom);
xw.close();

}

//删---删除最后一个元素
@Test
public void del() throws Exception {
Document dom = new SAXReader().read("./xml/users.xml");
Element root = dom.getRootElement();

//获取最后一个元素
List<Element> list = root.elements();
Element eLast = list.get( list.size()-1 );
eLast.getParent().remove(eLast); // remove()删除的是直接孩子节点

//保存
XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
xw.write(dom);
xw.close();//关流时自动刷缓存
}

//改---把最后一个元素的id属性 和 <name>中的文本内容修改了
@Test
public void update() throws Exception {
Document dom = new SAXReader().read("./xml/users.xml");
Element root = dom.getRootElement();

//获取最后一个元素
List<Element> list = root.elements();
Element eLast = list.get( list.size()-1 );

//修改id属性 和 <name>中的文本内容
eLast.addAttribute("id", "888");//若该属性存在是修改,否则是添加
eLast.element("name").setText("xxxx大学");

//保存
XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
xw.write(dom);
xw.close();
}

@Test //利用程序创建一个新的XML文档----无中生有
public void createNewXml() throws Exception {
Document dom = DocumentHelper.createDocument();
Element root = dom.addElement("students");
Element eStud = root.addElement("stud");
eStud.addAttribute("id", "140660201");
eStud.addElement("name").setText("Jack");
eStud.addElement("age").setText("22");

//持久化
XMLWriter xw = new XMLWriter(new FileWriter("./xml/students.xml"));
xw.write(dom);
xw.close();
}

}



<?xml version="1.0" encoding="utf-8"?>


<users> 
  <user id="A001"> 
    <name>Jack</name>  
    <age>22</age> 
  </user>  
  <user id="A002"> 
    <name>张三</name>  
    <age>24</age> 
  </user>  
  <user id="B001"> 
    <name>小李</name>  
    <age>20</age> 
  </user>  
  <user id="B002"> 
    <name>小张</name>  
    <age>28</age> 
  </user>  
  <user id="C001"> 
    <name>刘备</name>  
    <age>35</age> 
  </user>  
</users>

原创粉丝点击