DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。使用时需要引入的类包包括:dom4j-1.6.1.jar和jaxen-1.1-beta-7.jar(需要引入,否则执行时可能抛java.lang.NoClassDefFoundError:org/jaxen/JaxenException异常)
————————————————————代码如下—————————————————————
package com.dom4j;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
/**
* @功能描述:通过Dom4J操作(创建、读取和修改)XML文件
*/
public class Dom4JXML {
public static void main(String[] args) {
createXML();
updateXML(info);
}
/**
* 创建XML文件
*/
public static void createXML() {
Document doc = DocumentHelper.createDocument(); //用工厂类创建一个实例
Element rootEle = doc.addElement("emps"); //创建根元素emps
rootEle.addComment("这是一个dom4j生成的xml文件"); //添加注释
Element empEle = rootEle.addElement("emp"); //emps根节点下创建一个emp节点
empEle.addAttribute("id", "1"); //emp添加属性id="1"
Element nameEle = empEle.addElement("name"); //emp节点下创建一个name节点
nameEle.setText("zhangsan"); //name节点下创建一个文本节点
Element sexEle = empEle.addElement("sex"); //再为name节点创建一个兄弟节点
sexEle.setText("man");
//将document中的内容写入文件中
try {
Writer out = new FileWriter("F://emps.xml");
OutputFormat format = OutputFormat.createPrettyPrint(); //格式化输出
format.setEncoding("GBK"); //设置编码
XMLWriter writer = new XMLWriter(out,format); //创建写出对象
writer.write(doc);
writer.close();
System.out.println("创建emps.xml成功!");
} catch (IOException e) {
System.out.println("失败了!");
}
}
/**
* 修改XML文件
*/
public static void updateXML(String info){
try {
info = "<root><notice><title>公告标题</title><content>公告内容</content><progress>招聘流程</progress></notice></root>";
SAXReader reader = new SAXReader(); //创建读入对象
Document doc = reader.read(new FileInputStream(new File("F://emps.xml"))); //读取文件
Document doc = DocumentHelper.parseText(info); //读取XML字符串
List listAttr = doc.selectNodes("/emps/emp/@id"); //查找节点emp下的id属性
Iterator itAttr = listAttr.iterator();
while(itAttr.hasNext()){
Attribute attr = (Attribute) itAttr.next();
attr.setValue("001"); //emp属性修改为001
}
List listText = doc.selectNodes("/emps/emp/name"); //查找emp下的name节点
Iterator itText = listText.iterator();
while(itText.hasNext()){
Element textEle = (Element) itText.next();
textEle.setText("张三"); //name节点的内容修改为"张三"
}
List listEle = doc.selectNodes("/emps/emp"); //查找emp节点
Iterator itEle = listEle.iterator();
while(itEle.hasNext()){
Element empEle = (Element) itEle.next();
Iterator itSex = empEle.elementIterator("sex"); //查找emp下的sex节点
while(itSex.hasNext()){
Element sexEle = (Element) itSex.next();
empEle.remove(sexEle); //删除sex节点
}
}
Writer out = new FileWriter("F://emps(update).xml"); //创建写出流
OutputFormat format = OutputFormat.createPrettyPrint(); //格式化输出
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(out,format); //创建写出对象
writer.write(doc);
writer.close();
System.out.println("生成emps(update).xml成功。");
} catch (Exception e) {
System.out.println("失败了!");
}
}
}