java解析xml文档的开源工具有很多,本文主要使用dom4j解析xml文档,是一个入门示例。
1.maven依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
2.xml示例文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="bean1" class="cn.edu.hbut.zw.dom4j.class1"></bean>
<bean id="bean2" class="cn.edu.hbut.zw.dom4j.class2"></bean>
<bean id="bean3" class="cn.edu.hbut.zw.dom4j.class3"></bean>
<bean id="bean4"></bean>
<bean id="bean5" class="cn.edu.hbut.zw.dom4j.class5"></bean>
<bean id="bean6" class="cn.edu.hbut.zw.dom4j.class6"></bean>
<bean id="bean7" class="cn.edu.hbut.zw.dom4j.class7"></bean>
<bean class="cn.edu.hbut.zw.dom4j.class8"></bean>
</beans>
3.解析xml文件
public class Dom4jUtil {
Map<String,String> beans = new HashMap<String,String>();
//根据路径获取document对象
public Document parse(String xmlPath) throws DocumentException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File(xmlPath));
return document;
}
@SuppressWarnings("unchecked")
public Map<String,String> parseXml(Document document){
Map<String,String> beans = new HashMap<String,String>();
if(document==null){
return null;
}
//获取根元素beans
Element ele = document.getRootElement();
//使用xpath表达式查找节点,此时表示查找的是有id和class属性的bean
List<Element> elements = ele.selectNodes("//beans/bean[@id and @class]");
for(Element element:elements){
System.out.println(element.attributeValue("id")+"----"+element.attributeValue("class"));
beans.put(element.attributeValue("id"), element.attributeValue("class"));
}
return beans;
}
public static void main(String[] args) {
Dom4jUtil util = new Dom4jUtil();
//根据类加载器获取xml文件路径
String xmlPath = Dom4jUtil.class.getClassLoader().getResource("applicationContext.xml").getPath();try {
Document document = util.parse(xmlPath);
util.parseXml(document);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
4.运行main方法,结果如下
bean1----cn.edu.hbut.zw.dom4j.class1
bean2----cn.edu.hbut.zw.dom4j.class2
bean3----cn.edu.hbut.zw.dom4j.class3
bean5----cn.edu.hbut.zw.dom4j.class5
bean6----cn.edu.hbut.zw.dom4j.class6
bean7----cn.edu.hbut.zw.dom4j.class7