xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student>
<name>李明</name>
<age>25</age>
</student>
<student>
<name>小明</name>
<age>15</age>
</student>
</class>
package cn.itsource.dom4jtest;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.Node;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class Dom4jTest {
File f = new File("resources/student.xml");
Document dom;
Element root;
@Before
public void test() throws Exception {
SAXReader reader = new SAXReader(); //创建对象
dom = reader.read(f); // 获取dom对象
root = dom.getRootElement(); // 获取根节点
//root = (Element) dom.getRootElement();
//System.out.println(root);
}
@Test // Xpath
public void xpathGet(){
Node node2 = dom.selectSingleNode("/class/student[1]/age"); // 通过Xpath直接通过路径获取
// Node node = dom.selectSingleNode("/class/student[1]/name");
//System.out.println(node2);
//String content = node.getTextContent();
System.out.println(node2.getText());
}
@Test // 查
public void select(){
List list = root.elements("student"); // 只能从当前节点获取到其子节点, 不能获取到子孙节点
//System.out.println(list);
for (Object object : list) {
Element obj = (Element) object;
List list2 = obj.elements("name");
for (Object object2 : list2) { // 想要获取子孙节点, 只能一步一步往下寻找
Element obj2 = (Element) object2;
System.out.println(obj2.getName());
}
System.out.println(obj.getName());
}
}
@Test // 增
public void add(){
Element ele= (Element)root.elements("student").get(0); // 获取到第一个student节点
Element element = ele.addElement("gred");
element.setText("90");
}
@Test // 删
public void delect(){
Element ele= (Element)root.elements("student").get(0);
Element parent = ele.getParent(); // 获取父节点
parent.remove(ele); // 通过父亲删除子节点
}
@Test // 改
public void update(){
Element ele= (Element)root.elements("student").get(0);
Element element = ele.element("age"); // 获取想要修改的标签节点
element.setText("25"); // 重新设置内容
}
@After // 刷新,回写
public void flush() throws IOException{
OutputFormat prettyPrint = OutputFormat.createPrettyPrint(); // 票亮打印
XMLWriter writer = new XMLWriter(new FileWriter(f), prettyPrint); // 获取XMLWriter对象
writer.write(dom); // 将内存中内容写入到磁盘
writer.close(); // 关闭流
}
}