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 readData(Element ele){
    	Map map = new HashMap();
    	//得到元素列表遍历
		List 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 readXml(String xml){
    	Map 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 = " 6  6 2";
    	 Map root = readXml(str);
    	 for (Map.Entry 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-1.6.1.jar (306.5 KB)
  • 下载次数: 0

你可能感兴趣的:(dom4j)