欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用dom4j来解析xml文件或xml字符串 博客分类: Java EE dom4jxml解析xml文件xml字符串 

程序员文章站 2024-02-21 16:04:39
...

现有一个配置文件,需要解析出根节点与子节点,还有子节点下属性的信息。虽然w3c.dom规范亦可以解析,但这儿我们尝试使用dom4j的方式来解析。

涉及到的jar包有dom4j-1.6.1.jar

 

xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean id="computer" class="org.crazyit.app.main.Computer">
		<property name="name" value="孙悟空的智慧型手机" />
		<property name="out" ref="betterPrinter" />
	</bean>
	
	<bean id="printer" class="org.crazyit.app.inter.impl.Printer" />
	<bean id="betterPrinter" class="org.crazyit.app.inter.impl.BetterPrinter" />
	
	<bean id="now" class="java.util.Date" scope="prototype" />
</beans>

 

解析xml配置文件的java类:

SAXReader reader = new SAXReader();
Document doc = reader.read(new File(filePath));
//得到根节点
Element root = doc.getRootElement();

//遍历根节点下的子节点(同样也可以遍历某个含子节点的子节点)
for(Object obj : root.elements()) {
    Element ele = (Element) obj;
//获取子节点的属性
    String beanId = ele.attributeValue("id");
    String beanClazz = ele.attributeValue("class");
    String beanScope = ele.attributeValue("scope");
}

 

 解析xml格式的字符串:

Map map = new HashMap();
 StringReader reader = new StringReader(msg);
 InputSource source = new InputSource(reader);
 SAXReader sr = new SAXReader();

 Document doc = sr.read(source);

//得到Document之后,下面的步骤就跟上面解析xml文件的步骤一致

 

但如果是一般的类型:如html那种配置文件(即不是这种Spring的xml),解析的语法又有不同,如:

 

 Map map = new HashMap();  
        Document doc = null;  
        try {  
            doc = DocumentHelper.parseText(xml); // 将字符串转为XML  
  
            Element rootElt = doc.getRootElement(); // 获取根节点  
  
            System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称  
  
  
            Iterator iter = rootElt.elementIterator("head"); // 获取根节点下的子节点head  
  
            // 遍历head节点  
  
            while (iter.hasNext()) {  
  
                Element recordEle = (Element) iter.next();  
                String title = recordEle.elementTextTrim("title"); // 拿到head节点下的子节点title值  
  
                System.out.println("title:" + title);  
                map.put("title", title);  
  
                Iterator iters = recordEle.elementIterator("script"); // 获取子节点head下的子节点script  
  
  
                // 遍历Header节点下的Response节点(如果子节点下又有子节点的话,继续遍历)  
  
               
        
  
            Iterator iterss = rootElt.elementIterator("body"); ///获取根节点下的子节点body  
  
            // 遍历body节点  
  
            while (iterss.hasNext()) {  
                Element recordEless = (Element) iterss.next();  
                String result = recordEless.elementTextTrim("result"); // 拿到body节点下的子节点result值  
  
                System.out.println("result:" + result);  
  
                Iterator itersElIterator = recordEless.elementIterator("form"); // 获取子节点body下的子节点from 
  
                // 遍历body节点下的from节点  
  
               
            }  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return map;  
    }