将xml格式字符串转换成一个map格式,其中key为xml中的节点名称,多层中间用“.”连接,value为节点内容。
1.输入
<?xml version="1.0" encoding="UTF-8"?> <Response> <ResultCode>000000</ResultCode> <ResultDesc>成功</ResultDesc> <nn> <test>111</test> <a> <b>r</b> </a> </nn> </Response>
2.输出
Response.nn.test=111
Response.ResultCode=000000
Response.ResultDesc=成功
Response.nn.a.b=r
3.完整代码
importorg.dom4j.Document; importorg.dom4j.DocumentException; importorg.dom4j.DocumentHelper; importorg.dom4j.Element; importjava.util.HashMap; importjava.util.Iterator; importjava.util.Map; /** * */ public classDom4jUtil { /** *@description将xml字符串转换成map *@paramxml *@returnMap */ public staticMap readStringXmlOut(String xml) { Map map =newHashMap(); Document doc =null; try{ // 将字符串转为XML doc = DocumentHelper.parseText(xml); // 获取根节点 Element rootElt = doc.getRootElement(); // 拿到根节点的名称 map.putAll(readStringXmlOut(rootElt)); }catch(DocumentException e) { e.printstacktrace(); }catch(Exception e) { e.printstacktrace(); } returnmap; } /** *@description将xml字符串转换成map *@paramrootElt *@returnMap */ public staticMap readStringXmlOut(Element rootElt) { Map map =newHashMap(); try{ // 拿到节点的名称 if(rootElt.isTextOnly()){ map.put(rootElt.getName(),rootElt.getStringValue()); }else{ // 获取根节点下的子节点 Iterator iter = rootElt.elementIterator(); while(iter.hasNext()) { Element recordEle = (Element) iter.next(); recordEle.setName(recordEle.getParent().getName() +"."+ recordEle.getName()); map.putAll(readStringXmlOut(recordEle)); } } }catch(Exception e) { e.printstacktrace(); } returnmap; } public static voidmain(String[] args) { // 下面是需要解析的xml字符串例子 String xmlString ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response>\n"+ " <ResultCode>000000</ResultCode>\n"+ " <ResultDesc>成功</ResultDesc>\n"+ " <nn><test>111</test><a><b>r</b></a></nn>\n"+ "</Response>"; Map map =readStringXmlOut(xmlString); Iterator iters = map.keySet().iterator(); while(iters.hasNext()) { String key = iters.next().toString();// 拿到键 String val = map.get(key).toString();// 拿到值 System.out.println(key + "="+ val); } } }