DOM4j是一个易用的,开源的JAVA操作XML的API,写过一篇4种XML操作API的比较,DOM4j是性能和易用行最佳的。因此做一个小教程,供初学者学习。
学习DOM4j首先就先来了解下它主要的包
DOM4j所有的接口都在org.dom4j这个包里定义着
org.dom4j.Attribute : Attribute接口定义了XML文件的属性
org.dom4j.Branch : Branch为能够包含子节点的节点如XML元素和文档定义了一个公共行为
org.dom4j.CDATA : CDATA定义了XML CDATA区域
org.dom4j.CharacterData: CharacterData是一个标识接口,标识基于字符的节点。
org.dom4j.Comment : Comment定义了XML注释的行为
org.dom4j.Document : Docement接口定义了XML文档
org.dom4j.Element : Element定义了XML元素
org.dom4j.ElementHandler: ElementHandler定义了Element对象的处理器
org.dom4j.ElementPath : 被ElementHandler使用,用于取得当前正在处理的路径层次信息
org.dom4j.Entity : Entity定义XML entity
org.dom4j.Node : Node为所有的dom4j中XML节点定义了多态行为
org.dom4j.NodeFilter : NodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为
org.dom4j.ProcessingInstruction : ProcessingInstruction定义XML处理指令
org.dom4j.Text : Test定义了XML文本节点
org.dom4j.Visitor : Visitor用于实现Visitor模式
org.dom4j.XPath : XPath在分析一个字符串后会提供一个XPath表达式
下面说下主要的实用方法
1: 读取并解析XML文档:
读写XML文档主要依赖于org.dom4j.io包,提供了DOMReader和SAXReader两类不同方式,调用方式一样。
// 从文件读取XML,输入文件名,返回XML文档
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
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;
*
* 用DOM4J创建一个XML文件
* @param args
*/
public boolean newXMl(String fileName){
boolean returnValue=false;
//定义一个XML文档
Document docement=DocumentHelper.createDocument();
//设置XML文档的元素
Element rootElement=docement.addElement("DOM4J创建XML文档");
rootElement.addComment("镜花水月2007-4-24晚上创建");
Element nameElement=rootElement.addElement("镜花水月");
nameElement.addAttribute("名字","不告诉你");
Element schoolElement=nameElement.addElement("学校");
schoolElement.setText("西安翻译学院");
Element cityElement=rootElement.addElement("城市");
cityElement.setText("上海");
Element homeElement=cityElement.addElement("住址");
homeElement.setText("徐家汇");
//创建XML文档
try {
/** 格式化输出,类型IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();
/** 指定XML编码 */
format.setEncoding("GBK");
XMLWriter writer=new XMLWriter(new FileWriter(new File(fileName)),format);
writer.write(docement);
writer.close();
return returnValue=true;
} catch (IOException e) {
e.printStackTrace();
}
return returnValue;
}
/**
*
* 用DOM4J修改一个XML文件
* @param args
*
*/
public boolean update(String fileName,String newFileName){
boolean returnValaue=false;
SAXReader reader=new SAXReader();
try {
Document docement=reader.read(new File(fileName));
List list=null;
list=docement.selectNodes("/DOM4J创建XML文档/镜花水月/@名字");
Iterator it=list.iterator();
while(it.hasNext()){
Attribute attribute=(Attribute) it.next();
if(attribute.getValue().equals("不告诉你")){
attribute.setValue("还是不告诉你");
}
}
//将就该写入新的文件
try {
//转码
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer=new XMLWriter(new FileWriter(new File(newFileName)),format);
writer.write(docement);
writer.close();
return returnValaue=true;
} catch (IOException e) {
e.printStackTrace();
}
} catch (DocumentException e) {
e.printStackTrace();
}
return returnValaue;
}
public static void main(String[] args) {
NewXML newXml=new NewXML();
String name="newXML.xml";
String newName="UpdateXML.xml";
if(!newXml.newXMl(name)){
System.out.println("创建出现错误!");
return ;
}else{
System.out.println("创建XML成功!");
}
if(!newXml.update(name,newName)){
System.out.println("修改出现错误!");
return;
}else{
System.out.println("修改XML成功");
}