Dom4J是一個開源的優秀的XML解析API,現在越來越多的項目中開始採用這種解析方式,其中包含了著名的Hibernate。這裡我們使用Dom4J解析一個帶命名空間的CXF的Spring設定檔。先匯入dom4j-1.6.1.jar
spring 設定檔 applicationContext-cxf.xml:
<?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://www.springframework.org/schema/beans"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xmlns:jaxws="http://cxf.apache.org/jaxws"<br /> xsi:schemaLocation="</p><p>http://www.springframework.org/schema/beans</p><p>http://www.springframework.org/schema/beans/spring-beans.xsd</p><p>http://cxf.apache.org/jaxws</p><p> http://cxf.apache.org/schemas/jaxws.xsd"<br /> default-autowire="byName" default-lazy-init="true"><br /><import resource="classpath:META-INF/cxf/cxf.xml" /><br /><import resource="classpath:META-INF/cxf/cxf-servlet.xml" /><br /><import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /><br /> <bean id="jaxWsServiceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" scope="prototype"><br /> <property name="wrapped" value="true"/><br /> <property name="dataBinding" ref="aegisBean"/><br /> <property name="serviceConfigurations"><br /> <list><br /> <bean class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration"/><br /> <bean class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration"/><br /> <bean class="org.apache.cxf.service.factory.DefaultServiceConfiguration"/><br /> </list><br /> </property><br /> </bean><br /> <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding"/></p><p> <jaxws:endpoint id="WSpersonService" implementor="#personService" address="/PersonService"><br /> <jaxws:serviceFactory><br /> <ref bean="jaxWsServiceFactoryBean"/><br /> </jaxws:serviceFactory><br /> </jaxws:endpoint><br /></beans><br />
Java代碼:
package test.junit;</p><p>import java.io.InputStream;<br />import java.util.HashMap;<br />import java.util.List;<br />import java.util.Map;<br />import org.dom4j.Document;<br />import org.dom4j.DocumentException;<br />import org.dom4j.Element;<br />import org.dom4j.Node;<br />import org.dom4j.XPath;<br />import org.dom4j.io.SAXReader;</p><p>public class XmlProcessor{<br /> public Document readXML(String file){<br /> InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream(file);<br /> SAXReader saxReader=new SAXReader();<br /> Document doc=null;<br /> try{<br /> doc=saxReader.read(inputStream);<br /> }catch(DocumentException e){<br /> e.printStackTrace();<br /> }<br /> return doc;<br /> }</p><p> public static void main(String[] args){<br /> XmlProcessor xmlProcessor=new XmlProcessor();<br /> Document document=xmlProcessor.readXML("applicationContext-cxf.xml");<br /> //把解析路徑切換到/beans下<br /> Node node=document.selectSingleNode("/beans");<br /> Map nsMap=new HashMap();<br /> nsMap.put("beans","http://www.springframework.org/schema/beans");<br /> //對document而言全路徑為:/beans:beans/beans:bean<br /> XPath xpath=document.createXPath("beans:bean");</p><p> xpath.setNamespaceURIs(nsMap);<br /> List<Element> list=xpath.selectNodes(node);<br /> System.out.println("找到<bean></bean>節點數:"+list.size());<br /> //列印找到的每個目標節點的內容<br /> for(Element element:list){<br /> System.out.println(element.attributeValue("id")+":");<br /> System.out.println(element.asXML());<br /> }</p><p> nsMap.put("jaxws","http://cxf.apache.org/jaxws");<br /> //對document而言全路徑為:/beans:beans/jaxws:endpoint<br /> xpath=document.createXPath("jaxws:endpoint");<br /> list=xpath.selectNodes(node);<br /> System.out.println("找到<jaxws:endpoint></jaxws:endpoint>節點數:"+list.size());<br /> //列印找到的每個目標節點的內容<br /> for(Element element:list){<br /> System.out.println(element.attributeValue("id")+":");<br /> System.out.println(element.asXML());<br /> }<br /> }<br />}