dom4j解析xml文件(转:从一位美女)

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



Java代码

   1. Xml代码  
   2. 1.<?xml version="1.0" encoding="UTF-8"?>   
   3. 2.   
   4. 3.<classinfo>   
   5. 4.   
   6. 5.<classname>cn.zld.testdom.StudentInfo</classname>   
   7. 6.   
   8. 7.<element>   
   9. 8.    <methodname>setStName</methodname>   
  10. 9.    <value>张立冬</value>   
  11. 10.</element>   
  12. 11.   
  13. 12.<element>   
  14. 13.    <methodname>setStNumber</methodname>   
  15. 14.    <value>20080810</value>   
  16. 15.</element>   
  17. 16.   
  18. 17.<element>   
  19. 18.    <methodname>setAge</methodname>   
  20. 19.    <value>20</value>   
  21. 20.</element>   
  22. 21.   
  23. 22.</classinfo>   
  24. <?xml version="1.0" encoding="UTF-8"?> 
  25.  
  26. <classinfo> 
  27.  
  28. <classname>cn.zld.testdom.StudentInfo</classname> 
  29.  
  30. <element> 
  31.     <methodname>setStName</methodname> 
  32.     <value>张立冬</value> 
  33. </element> 
  34.  
  35. <element> 
  36.     <methodname>setStNumber</methodname> 
  37.     <value>20080810</value> 
  38. </element> 
  39.  
  40. <element> 
  41.     <methodname>setAge</methodname> 
  42.     <value>20</value> 
  43. </element> 
  44.  
  45. </classinfo> 建立StduentInfo类文件 
  46.  
  47. Java代码  
  48. 1.package cn.zld.testdom;    
  49. 2.   
  50. 3./**  
  51. 4. * 学生信息类  
  52. 5. * @author 张立冬  
  53. 6. *  
  54. 7. */   
  55. 8.public class StudentInfo {    
  56. 9.   
  57. 10.    private String stName;   //学生名字    
  58. 11.    private String stNumber; //学生学号    
  59. 12.    private String Age;      //学生年龄    
  60. 13.   
  61. 14.    public String toString(){    
  62. 15.        return "学生名字:"+this.getStName()+"  学生学号:"+this.getStNumber()+"  学生年龄:"+this.getAge();    
  63. 16.    }    
  64. 17.   
  65. 18.    //getter & setter 方法    
  66. 19.    public String getStName() {    
  67. 20.        return stName;    
  68. 21.    }    
  69. 22.   
  70. 23.    public void setStName(String stName) {    
  71. 24.        this.stName = stName;    
  72. 25.    }    
  73. 26.   
  74. 27.    public String getStNumber() {    
  75. 28.        return stNumber;    
  76. 29.    }    
  77. 30.   
  78. 31.    public void setStNumber(String stNumber) {    
  79. 32.        this.stNumber = stNumber;    
  80. 33.    }    
  81. 34.   
  82. 35.    public String getAge() {    
  83. 36.        return Age;    
  84. 37.    }    
  85. 38.   
  86. 39.    public void setAge(String age) {    
  87. 40.        Age = age;    
  88. 41.    }    
  89. 42.   
  90. 43.}   
  91. package cn.zld.testdom; 
  92.  
  93. /**
  94.  * 学生信息类
  95.  * @author 张立冬
  96.  *
  97.  */ 
  98. public class StudentInfo { 
  99.  
100.     private String stName;   //学生名字 
101.     private String stNumber; //学生学号 
102.     private String Age;      //学生年龄 
103.  
104.     public String toString(){ 
105.         return "学生名字:"+this.getStName()+"  学生学号:"+this.getStNumber()+"  学生年龄:"+this.getAge(); 
106.     } 
107.  
108.     //getter & setter 方法 
109.     public String getStName() { 
110.         return stName; 
111.     } 
112.  
113.     public void setStName(String stName) { 
114.         this.stName = stName; 
115.     } 
116.  
117.     public String getStNumber() { 
118.         return stNumber; 
119.     } 
120.  
121.     public void setStNumber(String stNumber) { 
122.         this.stNumber = stNumber; 
123.     } 
124.  
125.     public String getAge() { 
126.         return Age; 
127.     } 
128.  
129.     public void setAge(String age) { 
130.         Age = age; 
131.     } 
132.  
133. } 
134.  测试主类Test 
135.  
136. Java代码  
137. 1.package cn.zld.testdom;    
138. 2.   
139. 3.import java.lang.reflect.InvocationTargetException;    
140. 4.import java.lang.reflect.Method;    
141. 5.import org.dom4j.DocumentException;    
142. 6.   
143. 7./**  
144. 8. * dom4j使用测试  
145. 9. * @author 张立冬  
146. 10. *  
147. 11. */   
148. 12.public class Test {    
149. 13.   
150. 14.        public static void main(String args[]){    
151. 15.            try{    
152. 16.                Test te=new Test();    
153. 17.                te.readXML();    
154. 18.            }catch(Exception e){    
155. 19.                e.printStackTrace();    
156. 20.            }    
157. 21.        }    
158. 22.   
159. 23.   
160. 24.        /**  
161. 25.         * 读取XML文件  
162. 26.         */   
163. 27.        public void readXML(){    
164. 28.            //创建文件对象    
165. 29.            java.io.File file=new java.io.File("studentinfo.xml");    
166. 30.            if(file.exists()){    
167. 31.                try{    
168. 32.                //创建一个读取XML文件的对象    
169. 33.                org.dom4j.io.SAXReader reader=new org.dom4j.io.SAXReader();    
170. 34.                //创建一个文档对象    
171. 35.                org.dom4j.Document document=reader.read(file);    
172. 36.                //获取文件的根节点    
173. 37.                org.dom4j.Element element=document.getRootElement();    
174. 38.                System.out.println("得到根节点标签名:"+element.getName());    
175. 39.                System.out.println("得到类名:"+element.elementText("classname"));    
176. 40.                //根据得到的对象名创建对象    
177. 41.                Class c=Class.forName(element.elementText("classname"));    
178. 42.                Object obj=c.newInstance();    
179. 43.                //获取该对象的所有方法    
180. 44.                Method[] me=obj.getClass().getMethods();    
181. 45.   
182. 46.                //循环获取该对象的属性    
183. 47.                for(java.util.Iterator i=element.elementIterator("element");i.hasNext();){    
184. 48.                    //获取节点元素    
185. 49.                    element=(org.dom4j.Element)i.next();    
186. 50.                    String methodname=element.elementText("methodname");    
187. 51.                    String value=element.elementText("value");    
188. 52.                    for(Method m:me){    
189. 53.                        if(m.getName().equals(methodname)){    
190. 54.                            //若得到的方法名一致则调用该方法    
191. 55.                            m.invoke(obj,value);    
192. 56.                            break;    
193. 57.                        }    
194. 58.                    }    
195. 59.                }    
196. 60.                System.out.println(obj);    
197. 61.                }    
198. 62.                catch(Exception e){    
199. 63.                    e.printStackTrace();    
200. 64.                }    
201. 65.   
202. 66.            }    
203. 67.            else{    
204. 68.                System.out.println("XML文件不存在!");    
205. 69.            }    
206. 70.        }    
207. 71.}   

你可能感兴趣的:(编程,xml,IBM,软件测试)