学习的时候马虎,使用的时候辛苦!
刚才模拟spring的时候,解析spring的配置文件,突然发现竟然好像不会了……
然后又回过头看了下,我用的是dom4j:
beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="personService" class="com.silence.service.bean.PersonServiceImpl" >
<!-- id不能接受特殊字符 ,name可以接受特殊字符 -->
</bean>
</beans>
解析的过程:
/**
* 解析XML
* 使用的是dom4j
* 将配置文件下的所有的bean节点的信息装入beans
* @param fileName
*/
private void readXML(String fileName) {
SAXReader saxReader = new SAXReader();
Document document = null;
try {
URL xmlPath = this.getClass().getClassLoader().getResource(fileName);
document = saxReader.read(xmlPath);
Map<String , String > nsMap = new HashMap<String , String>();
nsMap.put("ns", "http://www.springframework.org/schema/beans"); //加入命名空间
XPath xsub = document.createXPath("//ns:beans/ns:bean"); //创建beans/bean的查询路径
xsub.setNamespaceURIs(nsMap);
List<Element> elemBeans = xsub.selectNodes(document); //查询document下的所有bean
for(Element e: elemBeans){
String id = e.attributeValue("id"); //获取bean的id和class属性
String className = e.attributeValue("class");
System.out.println("id="+id+",class="+className);
Bean bean = new Bean(id, className);
beans.add(bean);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
使用dom4j的时候需要导入dom4j的jar包,如果还使用了xpath,那么还要导入jaxen-XX-XX的jar包!