DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
注意:
dom4j1.6解压后有一个dom4j-1.6.1.jar文件,这就是应用时需要引入的类包,另外还有一个jaxen-1.1-beta-6.jarr文件,一般也需要引入,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常,其他的包可以选择用之。
举例说明:
创建一个emps.xml文档
package com.xml;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Dom4JXML {
public void createXML() {
//用工厂类创建一个document实例
Document doc = DocumentHelper.createDocument();
//创建根元素emps
Element rootEle = doc.addElement("emps");
//添加注释
rootEle.addComment("这是一个dom4j生成的xml文件");
//emps根节点下创建一个emp节点
Element empEle = rootEle.addElement("emp");
//emp添加属性id="1"
empEle.addAttribute("id", "1");
//emp节点下创建一个name节点
Element nameEle = empEle.addElement("name");
//name节点下创建一个文本节点zhangsan
nameEle.setText("zhangsan");
//再为name节点创建一个兄弟节点
Element sexEle = empEle.addElement("sex");
sexEle.setText("man");
//将document中的内容写入文件中
try {
Writer out = new FileWriter("F:\\emps.xml");
//格式化输出,类型IE浏览一样
OutputFormat format = OutputFormat.createPrettyPrint();
//OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//创建写出对象
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
System.out.println("生成emps.xml成功。");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("失败了。");
}
}
public static void main(String[] args) {
new Dom4JXML().createXML();
}
}
文档内容:
<?xml version="1.0" encoding="UTF-8"?>
<emps>
<!--这是一个dom4j生成的xml文件-->
<emp id="1">
<name>zhangsan</name>
<sex>man</sex>
</emp>
</emps>
将创建的emps.xml文档修改生成emps(update).xml
1. emp属性id 修改为:001
2. name中的文本修改为:张三
3. 删除emp下的sex属性
package com.xml;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
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;
public class Dom4JXML {
publicvoid updateXML(){
try {
//创建读入对象
SAXReader reader = new SAXReader();
//创建document实例
Document doc = reader.read("F:\\emps.xml");
//查找节点emp下的id属性
List listAttr = doc.selectNodes("/emps/emp/@id");
Iterator itAttr = listAttr.iterator();
while(itAttr.hasNext()){
Attribute attr = (Attribute) itAttr.next();
//emp属性修改为001
attr.setValue("001");
}
//查找emp下的name节点
List listText = doc.selectNodes("/emps/emp/name");
Iterator itText = listText.iterator();
while(itText.hasNext()){
Element textEle = (Element) itText.next();
//name节点的文本内容修改为"张三"
textEle.setText("张三");
}
//查找emp节点
List listEle = doc.selectNodes("/emps/emp");
Iterator itEle = listEle.iterator();
while(itEle.hasNext()){
Element empEle = (Element) itEle.next();
//查找emp下的sex节点
Iterator itSex = empEle.elementIterator("sex");
while(itSex.hasNext()){
Element sexEle = (Element) itSex.next();
//删除sex节点
empEle.remove(sexEle);
}
}
//创建写出流
Writer out = new FileWriter("F:\\emps(update).xml");
// 格式化输出
OutputFormat format = OutputFormat.createPrettyPrint();
//OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//创建写出对象
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
System.out.println("生成emps(update).xml成功。");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new Dom4JXML().updateXML();
}
}
|