首先给出XML文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student ID="1001">
<name>小马</name>
<age>18</age>
<sex>男</sex>
</student>
<student ID="1002">
<name>小王</name>
<age>22</age>
<sex>男</sex>
</student>
<student ID="1003">
<name>小刘</name>
<age>25</age>
<sex>女</sex>
</student>
</students>
下面给出java程序对XML文档中存取的数据进行增删改查操作,代码如下:
package com.scnu.xml.dom4j;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4j
{
public static void main(String[] args) throws Exception
{
//1.创建SAXReader
SAXReader reader = new SAXReader();
Document doc = reader.read("src/com/scnu/xml/dom4j/student.xml");
getInfo(doc);
//addNode(doc);
//deleteNode(doc);
//updateNodeInfo(doc);
}
/**
* 需求:获取指定标签内容
* @param doc
* @throws DocumentException
*/
static void getInfo(Document doc)throws DocumentException{
//1.获取根元素
Element rootElement = doc.getRootElement();
//2.根据名称获取根元素下所有标签
List<Element> stuList = rootElement.elements("student");
//3.遍历每一个子元素
/*for (Element stu : stuList)
{
//方法一:
Element nameEle = stu.element("name");
System.out.println(nameEle.getText());
}*/
for (Element stu : stuList)
{
String name = stu.elementText("name");//直接使用Element的elementText方法
String age = stu.elementText("age");
String sex = stu.elementText("sex");
String attID = stu.attributeValue("ID");
System.out.println(name);
System.out.println(age);
System.out.println(sex);
System.out.println(attID);
System.out.println("-------------------------");
}
}
/**
* 添加一个student子节点,添加一名学生信息
* @param doc
* @throws Exception
*/
static void addNode(Document doc)throws Exception{
//1.获取根元素
Element rootElement = doc.getRootElement();
//3.为根元素添加子元素
Element newElem = rootElement.addElement("student").addAttribute("ID", "1003");
//3.为新节点添加元素
newElem.addElement("name").setText("小刘");
newElem.addElement("age").setText("25");
newElem.addElement("sex").setText("女");
//调用写入操作
writeXML(doc);
}
/**
* 需求:删除第二个student节点
* @throws Exception
*/
static void deleteNode(Document doc)throws Exception{
//1.获取待删除节点,第二个学生
Element stuSelected = doc.getRootElement().elements("student").get(3);//注意这里是.elements("student"),有多个学生
//2.获取父节点并删除其子节点
boolean rs = stuSelected.getParent().remove(stuSelected);
System.out.println(rs);
// 写入xml文件
writeXML(doc);
}
/**
* 需求:跟新student节点信息
* @throws Exception
*/
static void updateNodeInfo(Document doc) throws IOException{
/*//需求1:把第一个学生的姓名改为小马
//1.获取跟节点
Element rootElement = doc.getRootElement();
//2.选择带修改学生节点的姓名元素
Element stuName = rootElement.elements("student").get(0).element("name");
//3.修改该学生的姓名元素
stuName.setText("小马");*/
//需求2同样删除其姓名元素
//stuName.getParent().remove(stuName);
//需求3:给第一个学生添加和删除"title"属性
//1.获取跟节点
Element rootElement = doc.getRootElement();
//2.选择带添加属性节点
Element stuElem = rootElement.elements("student").get(0);
//3.为该学生添加属性
stuElem.addAttribute("title", "三好学生");
//同样删除操作
//stuElem.remove(stuElem.attribute(1));
writeXML(doc);
}
/**
* 格式化代码写入XML文件
* @param doc
* @throws IOException
*/
static void writeXML(Document doc) throws IOException{ // 写入xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
Writer wr = new OutputStreamWriter(new FileOutputStream("src/com/scnu/xml/dom4j/student.xml"),"UTF-8");
XMLWriter writer = new XMLWriter(wr, format);
writer.write( doc );
wr.close();
}
}
当然在使用DOM4j时候要倒入DOM4j的jar包并进行buildpath,上面工程原文件以及XML学习资料见博客:点击打开链接