dom4j解析xml字符串

使用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对象(代码懒得写了=_=)。

猜你喜欢

转载自wangzemin.iteye.com/blog/2389096