一.什么是dom4j
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
二.何为XML文件
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
三.dom4j解析XML文件测试
首先我们建立一个XML文件如下所示
studentinfo.xml
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
二.何为XML文件
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
三.dom4j解析XML文件测试
首先我们建立一个XML文件如下所示
studentinfo.xml
Xml代码
1.<?xml version="1.0" encoding="UTF-8"?>
2.
3.<classinfo>
4.
5.<classname>cn.zld.testdom.StudentInfo</classname>
6.
7.<element>
8. <methodname>setStName</methodname>
9. <value>张立冬</value>
10.</element>
11.
12.<element>
13. <methodname>setStNumber</methodname>
14. <value>20080810</value>
15.</element>
16.
17.<element>
18. <methodname>setAge</methodname>
19. <value>20</value>
20.</element>
21.
22.</classinfo>
<?xml version="1.0" encoding="UTF-8"?>
<classinfo>
<classname>cn.zld.testdom.StudentInfo</classname>
<element>
<methodname>setStName</methodname>
<value>张立冬</value>
</element>
<element>
<methodname>setStNumber</methodname>
<value>20080810</value>
</element>
<element>
<methodname>setAge</methodname>
<value>20</value>
</element>
</classinfo> 建立StduentInfo类文件
Java代码
1.package cn.zld.testdom;
2.
3./**
4. * 学生信息类
5. * @author 张立冬
6. *
7. */
8.public class StudentInfo {
9.
10. private String stName; //学生名字
11. private String stNumber; //学生学号
12. private String Age; //学生年龄
13.
14. public String toString(){
15. return "学生名字:"+this.getStName()+" 学生学号:"+this.getStNumber()+" 学生年龄:"+this.getAge();
16. }
17.
18. //getter & setter 方法
19. public String getStName() {
20. return stName;
21. }
22.
23. public void setStName(String stName) {
24. this.stName = stName;
25. }
26.
27. public String getStNumber() {
28. return stNumber;
29. }
30.
31. public void setStNumber(String stNumber) {
32. this.stNumber = stNumber;
33. }
34.
35. public String getAge() {
36. return Age;
37. }
38.
39. public void setAge(String age) {
40. Age = age;
41. }
42.
43.}
package cn.zld.testdom;
/**
* 学生信息类
* @author 张立冬
*
*/
public class StudentInfo {
private String stName; //学生名字
private String stNumber; //学生学号
private String Age; //学生年龄
public String toString(){
return "学生名字:"+this.getStName()+" 学生学号:"+this.getStNumber()+" 学生年龄:"+this.getAge();
}
//getter & setter 方法
public String getStName() {
return stName;
}
public void setStName(String stName) {
this.stName = stName;
}
public String getStNumber() {
return stNumber;
}
public void setStNumber(String stNumber) {
this.stNumber = stNumber;
}
public String getAge() {
return Age;
}
public void setAge(String age) {
Age = age;
}
}
测试主类Test
Java代码
1.package cn.zld.testdom;
2.
3.import java.lang.reflect.InvocationTargetException;
4.import java.lang.reflect.Method;
5.import org.dom4j.DocumentException;
6.
7./**
8. * dom4j使用测试
9. * @author 张立冬
10. *
11. */
12.public class Test {
13.
14. public static void main(String args[]){
15. try{
16. Test te=new Test();
17. te.readXML();
18. }catch(Exception e){
19. e.printStackTrace();
20. }
21. }
22.
23.
24. /**
25. * 读取XML文件
26. */
27. public void readXML(){
28. //创建文件对象
29. java.io.File file=new java.io.File("studentinfo.xml");
30. if(file.exists()){
31. try{
32. //创建一个读取XML文件的对象
33. org.dom4j.io.SAXReader reader=new org.dom4j.io.SAXReader();
34. //创建一个文档对象
35. org.dom4j.Document document=reader.read(file);
36. //获取文件的根节点
37. org.dom4j.Element element=document.getRootElement();
38. System.out.println("得到根节点标签名:"+element.getName());
39. System.out.println("得到类名:"+element.elementText("classname"));
40. //根据得到的对象名创建对象
41. Class c=Class.forName(element.elementText("classname"));
42. Object obj=c.newInstance();
43. //获取该对象的所有方法
44. Method[] me=obj.getClass().getMethods();
45.
46. //循环获取该对象的属性
47. for(java.util.Iterator i=element.elementIterator("element");i.hasNext();){
48. //获取节点元素
49. element=(org.dom4j.Element)i.next();
50. String methodname=element.elementText("methodname");
51. String value=element.elementText("value");
52. for(Method m:me){
53. if(m.getName().equals(methodname)){
54. //若得到的方法名一致则调用该方法
55. m.invoke(obj,value);
56. break;
57. }
58. }
59. }
60. System.out.println(obj);
61. }
62. catch(Exception e){
63. e.printStackTrace();
64. }
65.
66. }
67. else{
68. System.out.println("XML文件不存在!");
69. }
70. }
71.}