dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
Jar包:dom4j-2.0.0-RC1.jar、jaxen-1.1-beta-6.jar(用于XPath)
代码示例:
import java.io.File;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
/**
* Dom4j使用示例
* 创建,修改,删除,解析XML文档
* @author xiayunan
*
*/
public class DOM4JDemo {
/**
* 创建XML文件
* @throws Exception
*/
@Test
public void createXML() throws Exception{
Document document = DocumentHelper.createDocument();
Element root = document.addElement("hibernate-mapping");
Element classElement =
root.addElement("class")
.addAttribute("name","com.trs.User")
.addAttribute("table","wcmuser");
classElement.addElement("property")
.addAttribute("name","username")
.addText("admin");
classElement.addElement("property")
.addAttribute("name","password")
.addText("123456");
OutputFormat format = OutputFormat.createPrettyPrint();//创建更漂亮的格式
// 指定文件
XMLWriter writer = new XMLWriter(
new FileWriter("User.hbm.xml"),format
);
writer.write( document );
writer.close();
}
/**
* 修改XML文档,改变password的值为12345678
* @throws Exception
*/
@Test
public void updateXML() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("User.hbm.xml"));
/*
* 注:XPath使用//hibernate-mapping/class/property[@name='password']
* 和直接使用//property[@name='password']效果是一样的,都是为了选取property元素
* 中属性name值为password的节点的值,这里是为了方便显示层级结构
*/
Node node = document.selectSingleNode( "//hibernate-mapping/class/property[@name='password']" );
node.setText("12345678");
OutputFormat format = OutputFormat.createPrettyPrint();//创建更漂亮的格式
// 指定文件
XMLWriter writer = new XMLWriter(
new FileWriter("User.hbm.xml"),format
);
writer.write(document);
writer.close();
}
/**
* 删除XML节点
* @throws Exception
*/
@Test
public void deleteXml() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("User.hbm.xml"));
Node node = document.selectSingleNode( "//property[@name='password']" );
node.getParent().remove(node);
OutputFormat format = OutputFormat.createPrettyPrint();//创建更漂亮的格式
// 指定文件
XMLWriter writer = new XMLWriter(
new FileWriter("User.hbm.xml"),format
);
writer.write(document);
writer.close();
}
/**
* 解析XML
* 获取class元素下所有的property元素的属性和值
* @throws Exception
*/
@Test
public void parseXml() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("User.hbm.xml"));
List<Node> nodes = document.selectNodes( "//hibernate-mapping/class/property" );
for(Node node:nodes){
System.out.println(node.getName());//元素的名称
System.out.println(node.valueOf("@name"));//元素name属性的值
System.out.println(node.getText());//元素的文本值
}
}
}
生成的XML:
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-mapping>
<class name="com.trs.User" table="wcmuser">
<property name="username">admin</property>
<property name="password">123456</property>
</class>
</hibernate-mapping>