dom4j解析XML文件测试

一.什么是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 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类文件

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

package cn.zld.testdom;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.dom4j.DocumentException;

/**
 * dom4j使用测试
 * @author 张立冬
 *
 */
public class Test {

		public static void main(String args[]){
			try{
				Test te=new Test();
				te.readXML();
			}catch(Exception e){
				e.printStackTrace();
			}
		}


		/**
		 * 读取XML文件
		 */
		public void readXML(){
			//创建文件对象
			java.io.File file=new java.io.File("studentinfo.xml");
			if(file.exists()){
				try{
				//创建一个读取XML文件的对象
				org.dom4j.io.SAXReader reader=new org.dom4j.io.SAXReader();
				//创建一个文档对象
				org.dom4j.Document document=reader.read(file);
				//获取文件的根节点
				org.dom4j.Element element=document.getRootElement();
				System.out.println("得到根节点标签名:"+element.getName());
				System.out.println("得到类名:"+element.elementText("classname"));
				//根据得到的对象名创建对象
				Class c=Class.forName(element.elementText("classname"));
				Object obj=c.newInstance();
				//获取该对象的所有方法
				Method[] me=obj.getClass().getMethods();

				//循环获取该对象的属性
				for(java.util.Iterator i=element.elementIterator("element");i.hasNext();){
					//获取节点元素
					element=(org.dom4j.Element)i.next();
					String methodname=element.elementText("methodname");
					String value=element.elementText("value");
					for(Method m:me){
						if(m.getName().equals(methodname)){
							//若得到的方法名一致则调用该方法
							m.invoke(obj,value);
							break;
						}
					}
				}
				System.out.println(obj);
				}
				catch(Exception e){
					e.printStackTrace();
				}

			}
			else{
				System.out.println("XML文件不存在!");
			}
		}
}

 在主类里面由于测试的需要一并连JAVA的反射机制一块测试了

    我的主要目的在于降低StudentInfo与整个程序的藉合度,因为StudentInfo类是动态绑定的,同时也增加程序的可扩展性,虽然只是一个简单的测试,但对以后的开发还是有所帮助的

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