1、dom4j介绍:
DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
2、使用dom4j需要的jar包:
xml-apis-2.0.2.jar
dom4j-1.6.1.jar
3、测试所使用xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!-- 创建一个对象 -->
<bean id="stu1" className="com.henau.bean.Student">
<property name="name" value="zhangsan" ></property>
<property name="age" value="10" />
<property name="sex" value="man" />
<property name="hobby" value="swim" />
<property name="teacher" value="teacher1"/>
</bean>
</beans>
4、测试所使用class
package com.henau.bean;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class GFXML {
public static void main(String args[]) {
Map<String,String> propertyMap = new HashMap<String,String>();
try {
File f = new File("src/bean.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
System.out.println("rootname:"+root.getName());
Element foo;
//得到bean的迭代器,遍历所有bean节点
for (Iterator i = root.elementIterator("bean"); i.hasNext();) {
//得到第i个bean元素
foo = (Element) i.next();
//属性名为id的属性值.
System.out.println("节点指定名称属性值得获取:"+foo.attributeValue("id"));
/*System.out.println("一级子节点name:"+foo.getName());
System.out.println("一级子节点属性值:"+foo.getStringValue());*/
for (Iterator m = foo.elementIterator("property"); m.hasNext();) {
//得到第i个bean元素
Element fooc = (Element) m.next();
//打印property结点中的name属性,value属性,并放入map中存储.
System.out.print("property节点的name属性值:"+fooc.attributeValue("name")+" ");
System.out.println("property节点的value属性值:"+fooc.attributeValue("value"));
propertyMap.put(fooc.attributeValue("name"), fooc.attributeValue("value"));
}
//检测map中是否存有数据
System.out.println("propertyMap.size:"+propertyMap.size());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
5、运行结果
6、思路:存储在xml中的对象利用dom4j解析,将数据存储到map中,也可以创建一个对象利用解析出的值进行对象的创建,为以后bean工厂的创建提供底层技术。纯属自己构思,更好的解决方案,技术希望讨论。