前端之家收集整理的这篇文章主要介绍了
XML报文转Map,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
XML报文转Map
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class StringXmlToMap {
/**
* @param args
* @throws JDOMException
* @throws IOException
*/
public static void main(String[] args) throws IOException,JDOMException {
//待转化的String类型的xml报文
String strxml="<xml>" +
"<return_code>" +
"<![CDATA[FAIL]]>" +
"</return_code>" +
"<return_msg>" +
" <![CDATA[appid不存在]]>" +
"</return_msg>" +
"</xml>";
StringXmlToMap str=new StringXmlToMap();
Map map=str.strXmlToMap(strxml);
System.out.println(map.get("return_code"));
}
/**
* 将传入的 String 类型的XML报文转化为Map类型的对象
* @param strxml
* @return
* @throws IOException
* @throws JDOMException
*/
public Map strXmlToMap(String strxml) throws IOException,JDOMException{
if(null == strxml || "".equals(strxml)) {
return null;
}
Map m = new HashMap();
InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element root = doc.getRootElement();
List list = root.getChildren();
Iterator it = list.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String k = e.getName();
String v = "";
List children = e.getChildren();
if(children.isEmpty()) {
v = e.getTextNormalize();
} else {
v = getChildrenText(children);
}
m.put(k,v);
}
//关闭流
in.close();
return m;
}
/**
* 获取子节点的Xml
* @param children
* @return
*/
public static String getChildrenText(List children) {
StringBuffer sb = new StringBuffer();
if(!children.isEmpty()) {
Iterator it = children.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String name = e.getName();
String value = e.getTextNormalize();
List list = e.getChildren();
sb.append("<" + name + ">");
if(!list.isEmpty()) {
sb.append(getChildrenText(list));
}
sb.append(value);
sb.append("</" + name + ">");
}
}
return sb.toString();
}
}