本篇写于微信公众号的xml消息包的解析,通过HttpServletRequest请求来获得xml
package org.gxj.util;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4j_Xml_Util {
public static Map<String, String> dom4j_xml(HttpServletRequest request) throws DocumentException, IOException {
// 创建sax io流,用于读取xml人间
SAXReader read = new SAXReader();
// 将xml文件读取到获取的document对象中
org.dom4j.Document doc = read.read(request.getInputStream());
//org.dom4j.Document doc = read.read(new File("D:/jsdzworkspace/weixin-web/src/NewFile.xml"));测试方法是否好用
// 用Document对了来创建根节点
Element root = doc.getRootElement();
Map<String, String> map = new HashMap<String, String>();
map = recur_xml(root, map);//这块调用的下面的递归解析xml的方法
// //得到根节点下所有的子节点
// List<Element> elementslist = root.elements();
// //遍历list获得值封装到map中 先创建map对象
// Map<String,String>map = new HashMap<String,String>();
// for (Element element : elementslist) {
// map.put(element.getName(), element.getText());
// }
return map;
}
// 接下来的方法是递归获取xml文件中的值
public static Map<String, String> recur_xml(Element root, Map<String, String> map) {
// 每次进来的时候,都是一个根节点,通过根结点来获取他的子节点
List<Element> elementslist = root.elements();
// 然后判断子节点的大小
if (elementslist.size() == 0) {
map.put(root.getName(), root.getText());
} else {
for (Element element : elementslist) {
recur_xml(element, map);
}
}
return map;
}
}