今天 天 用 xpath 解析 一个xml文件,不成功, 最后原因找到了,
是因为 这个xml文件的j是有命名空间的,
如这样:
<?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.xsd"> <bean id="userDao" class="com.xxxx.dao.UserDao"></bean> <bean id="userService" class="com.xxxx.service.UserService"></bean> </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.xsd">
要改成这样的 才能被下面的 代码解析 。
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="userDao" class="com.xxxx.dao.UserDao"></bean> <bean id="userService" class="com.xxxx.service.UserService"></bean> </beans>
---------下面是解析 的代码。
package com.xxxx.spring; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.XPath; import org.dom4j.io.SAXReader; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
private void parseXml(String fileName) { SAXReader saxReader=new SAXReader(); URL url=this.getClass().getClassLoader().getResource(fileName); System.out.println(url); try { Document document=saxReader.read(url); XPath xPath=document.createXPath("beans/bean"); System.out.println(xPath); List<Element> elementList=xPath.selectNodes(document); System.out.println(elementList); if(elementList !=null && elementList.size()>0){ beanList =new ArrayList<>(); for (Element el:elementList) { String id=el.attributeValue("id"); String clazz=el.attributeValue("class"); System.out.println("sdfsdf"); System.out.println(id+clazz); MyBean myBean=new MyBean(id,clazz); beanList.add(myBean); } } } catch (Exception e) { e.printStackTrace(); } }