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();
}
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>