dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,Hibernate用它来读写配置文件dom4j需要导入dom4j-full.jar包.
Dom4j家庭成员
主要API都在org.dom4j这个包里定义:
1.Attribute Attribute定义了XML的属性
2.Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,
3.CDATA CDATA 定义了XML CDATA 区域
4.CharacterData CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.
5. Comment Comment 定义了XML注释的行为
6. Document 定义了XML文档
7.DocumentType DocumentType 定义XML DOCTYPE声明
8. Element Element定义XML 元素
9. ElementHandler ElementHandler定义了 Element 对象的处理器
10. ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
11. Entity Entity定义 XML entity
12. Node Node为所有的dom4j中XML节点定义了多态行为
13. NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
14. ProcessingInstruction ProcessingInstruction 定义 XML 处理指令.
15. Text Text 定义XML 文本节点.
16. Visitor Visitor 用于实现Visitor模式.
17. XPath XPath 在分析一个字符串后会提供一个XPath 表达式
Dom4j如何干活?
1.利用dom4j创建一个XML文件:
view plaincopy to clipboardprint?
package com.xml;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class CreateXML {
public static void main(String[] args) {
XMLWriter writer = null;
try {
// 1.document构建器
Document doc = DocumentHelper.createDocument();
// 2.添加元素(根)
Element students = doc.addElement("students");
Element student1 = students.addElement("student");
// 添加属性;
student1.addAttribute("stuno", "s001");
// 添加子元素
student1.addElement("stuname").setText("刘光蓝");
student1.addElement("stusex").setText("男");
student1.addElement("stuage").setText("25");
//设置输出格式
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
writer = new XMLWriter(new FileWrite("d:/student.xml"),format);
writer.write(doc);
System.out.println("生成XML成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.xml;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class CreateXML {
public static void main(String[] args) {
XMLWriter writer = null;
try {
// 1.document构建器
Document doc = DocumentHelper.createDocument();
// 2.添加元素(根)
Element students = doc.addElement("students");
Element student1 = students.addElement("student");
// 添加属性;
student1.addAttribute("stuno", "s001");
// 添加子元素
student1.addElement("stuname").setText("刘光蓝");
student1.addElement("stusex").setText("男");
student1.addElement("stuage").setText("25");
//设置输出格式
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
writer = new XMLWriter(new FileWrite("d:/student.xml"),format);
writer.write(doc);
System.out.println("生成XML成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.利用dom4j读取一个XML文件:
view plaincopy to clipboardprint?
01.package com.xml;
02.
03.import java.io.File;
04.import java.util.List;
05.
06.import org.dom4j.Document;
07.import org.dom4j.Element;
08.import org.dom4j.Node;
09.import org.dom4j.io.SAXReader;
10.
11.public class ReaderXML {
12. public static void main(String[] args) {
13. try {
14. SAXReader saxReader=new SAXReader();
15. Document doc=saxReader.read(new File("d:/student.xml"));
16. //利用XPath来访问元素,属性
17. // /students/student[1] 指定某个元素
18. // /students/student/@stuno 指定某个属性
19. // /students/student[@stuno='s002']做判断
20. List<Node> data=doc.selectNodes("/students/student");
21. for(Node node:data){
22. //node.asXML() 以字符串的格式打印XML
23. if("Element".equals(node.getNodeTypeName())){
24. Element element=(Element)node;
25. //读取属性值
26. System.out.println(element.attributeValue("stuno"));
27. //读取子元素文本值
28. System.out.println(element.elementText("stuname"));
29. System.out.println(element.elementText("stusex"));
30. System.out.println(element.elementText("stuage")+"\n");
31. }
32. }
33. } catch (Exception e) {
34. e.printStackTrace();
35. }
36. }
37.
38.}
package com.xml;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class ReaderXML {
public static void main(String[] args) {
try {
SAXReader saxReader=new SAXReader();
Document doc=saxReader.read(new File("d:/student.xml"));
//利用XPath来访问元素,属性
// /students/student[1] 指定某个元素
// /students/student/@stuno 指定某个属性
// /students/student[@stuno='s002']做判断
List<Node> data=doc.selectNodes("/students/student");
for(Node node:data){
//node.asXML() 以字符串的格式打印XML
if("Element".equals(node.getNodeTypeName())){
Element element=(Element)node;
//读取属性值
System.out.println(element.attributeValue("stuno"));
//读取子元素文本值
System.out.println(element.elementText("stuname"));
System.out.println(element.elementText("stusex"));
System.out.println(element.elementText("stuage")+"\n");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.利用dom4j修改一个XML文件:
view plaincopy to clipboardprint?
01.package com.xml;
02.
03.import java.io.File;
04.import java.io.FileWriter;
05.import java.io.IOException;
06.import java.util.List;
07.
08.import org.dom4j.Document;
09.import org.dom4j.Element;
10.import org.dom4j.Node;
11.import org.dom4j.io.OutputFormat;
12.import org.dom4j.io.SAXReader;
13.import org.dom4j.io.XMLWriter;
14.
15.public class UpdateXMLData {
16.
17. public static void main(String[] args) {
18. XMLWriter writer = null;
19. try {
20. SAXReader saxReader = new SAXReader();
21. Document doc = saxReader .read(new File("d:/student.xml"));
22. List<Node> data = doc
23. .selectNodes("/students/student[@stuno='s002']");
24. for (Node node : data) {
25. if ("Element".equals(node.getNodeTypeName())) {
26. Element temp = (Element) node;
27. //修改student的stuno属性值
28. temp.setAttributeValue("stuno", "stu002");
29. }
30. }
31. OutputFormat format = OutputFormat.createPrettyPrint();
32. format.setEncoding("UTF-8");
33. writer = new XMLWriter(new FileWriter("d:/student.xml"), format);
34. writer.write(doc);
35. System.out.println("修改成功!");
36. } catch (Exception e) {
37. e.printStackTrace();
38. } finally {
39. try {
40. writer.close();
41. } catch (IOException e) {
42. // TODO Auto-generated catch block
43. e.printStackTrace();
44. }
45. }
46.
47. }
48.
49.}