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

dom4j解析xml字符串 博客分类: 公用方法 dom4j 

程序员文章站 2024-02-21 16:00:46
...

使用dom4j将xml字符串解析为map:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

@SuppressWarnings("unchecked")
public class XmlParser {
	public static Map<String,Object> readData(Element ele){
    	Map<String,Object> map = new HashMap<String,Object>();
    	//得到元素列表遍历
		List<Element> eList = ele.elements();
        for(Element e : eList){
        	if(e.elements().isEmpty()){
        		//如果该元素子元素为空,则直接获取文本
        		// e.getData() e.getStringValue();e.getText()e.getTextTrim()
        		map.put(e.getName(), e.getText());
        	}else{
        		//若有子元素,则递归取值
        		map.put(e.getName(), readData(e));
        	}
        }
    	return map;
    }
	public static Map<String,Object> readXml(String xml){
    	Map<String,Object> map = null;
    	try{
    		Document doc = DocumentHelper.parseText(xml);
        	// 获取根节点
            Element rootElt = doc.getRootElement();
            //通过根节点获取数据
            map = readData(rootElt);
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	return map;
    }
	public static void main(String[] args) {
		 String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><a><c> 6  6 </c></a><b>2</b></root>";
    	 Map<String,Object> root = readXml(str);
    	 for (Map.Entry<String, Object> entry : root.entrySet()) {  
    		 System.out.println(entry.getKey() + ":" + entry.getValue());  
    	 }
	}
}

 备注:

1)代码中使用元素名称作为key,如果需要使用某些属性值作为key,可以使用attributeValue方法取得名称作为key。

2)取得节点值有四个方法:e.getData() e.getStringValue() e.getText() e.getTextTrim()

其中getText和getTextTrim两个的区别看名称就可以理解,getTextTrim是取除左右空格的(内容中如果有两个或两个以上的空格会转为一个空格);getStringValue是取该节点下全部的string,若有子标签,会将子标签中的文本拼成一个字符串返回,说白了就是将该元素下所有的元素标签去掉以后的内容的拼接;getData的话,经过测试,所得结果和getText一致。

3)使用反射可以将map转换为Javabean对象(代码懒得写了=_=)。

相关标签: dom4j