用Dom4J解析带命名空间的XML文件

Dom4J是一个开源的优秀的XML解析API,现在越来越多的项目中开始采用这种解析方式,其中包含了著名的Hibernate。这里我们使用Dom4J解析一个带命名空间的CXF的Spring配置文件。先导入dom4j-1.6.1.jar

spring 配置文件 applicationContext-cxf.xml:

 

 

 

 

 

 

Java代码:

package test.junit; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.XPath; import org.dom4j.io.SAXReader; public class XmlProcessor{ public Document readXML(String file){ InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream(file); SAXReader saxReader=new SAXReader(); Document doc=null; try{ doc=saxReader.read(inputStream); }catch(DocumentException e){ e.printStackTrace(); } return doc; } public static void main(String[] args){ XmlProcessor xmlProcessor=new XmlProcessor(); Document document=xmlProcessor.readXML("applicationContext-cxf.xml"); //把解析路径切换到/beans下 Node node=document.selectSingleNode("/beans"); Map nsMap=new HashMap(); nsMap.put("beans","http://www.springframework.org/schema/beans"); //对document而言全路径为:/beans:beans/beans:bean XPath xpath=document.createXPath("beans:bean"); xpath.setNamespaceURIs(nsMap); List list=xpath.selectNodes(node); System.out.println("找到节点数:"+list.size()); //打印找到的每个目标节点的内容 for(Element element:list){ System.out.println(element.attributeValue("id")+":"); System.out.println(element.asXML()); } nsMap.put("jaxws","http://cxf.apache.org/jaxws"); //对document而言全路径为:/beans:beans/jaxws:endpoint xpath=document.createXPath("jaxws:endpoint"); list=xpath.selectNodes(node); System.out.println("找到节点数:"+list.size()); //打印找到的每个目标节点的内容 for(Element element:list){ System.out.println(element.attributeValue("id")+":"); System.out.println(element.asXML()); } } }

你可能感兴趣的:(JAVA)