dom4j解析XML文件测试

本文介绍了一款名为dom4j的Java XML API,并通过一个具体的例子展示了如何使用dom4j来读取并解析XML文件。该例程还演示了如何将解析的数据映射到Java对象中。
一.什么是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



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.}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值