参考:http://blog.csdn.net/yuan16423276/article/details/17385867
第一种,直接读取流:
private static Map<String, String> parseXml(HttpServletRequest request){
try {
InputStream is = request.getInputStream();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(is);
NodeList employees = document.getChildNodes();
for (int i = 0; i < employees.getLength(); i++) {
Node employee = employees.item(i);
NodeList employeeInfo = employee.getChildNodes();
for (int j = 0; j < employeeInfo.getLength(); j++) {
Node node = employeeInfo.item(j);
NodeList employeeMeta = node.getChildNodes();
for (int k = 0; k < employeeMeta.getLength(); k++) {
System.out.println(employeeMeta.item(k).getNodeName()
+ ":" + employeeMeta.item(k).getTextContent());
}
}
}
System.out.println("解析完毕");
} catch (IOException | ParserConfigurationException | SAXException e) {
e.printStackTrace();
}
return null;
}
第二种,字符串转为流:
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, SecurityException {
WeiXinReceiveMsgDTO wxrmDto = new WeiXinReceiveMsgDTO();
StringBuffer sb = new StringBuffer();
sb.append("<xml><ToUserName><![CDATA[");
sb.append("bob");
sb.append("]]></ToUserName><FromUserName><![CDATA[");
sb.append("looyii34343434");
sb.append("]]></FromUserName><CreateTime>");
sb.append("2761288732");
sb.append("</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[");
sb.append("消息文本");
sb.append("]]></Content><FuncFlag>0</FuncFlag></xml>");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream in = new ByteArrayInputStream(sb.toString().getBytes());
Document document = db.parse(in);
NodeList employees = document.getChildNodes();
for (int i = 0; i < employees.getLength(); i++) {
Node employee = employees.item(i);
NodeList employeeInfo = employee.getChildNodes();
for (int j = 0; j < employeeInfo.getLength(); j++) {
Node node = employeeInfo.item(j);
NodeList employeeMeta = node.getChildNodes();
for (int k = 0; k < employeeMeta.getLength(); k++) {
setOjectFieldValue(wxrmDto,node.getNodeName(),employeeMeta.item(k).getTextContent());
}
}
}
System.out.println(wxrmDto.toString());
}
/**
* 给对象的属性赋值
* @param obj 对象
* @param name 需要赋值属性名称
* @param value 需要的赋值
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws NoSuchMethodException
* @throws SecurityException
*/
public static void setOjectFieldValue(Object obj, String name , String value){
try {
Field[] flds = obj.getClass().getDeclaredFields();
for (int k2 = 0; k2 < flds.length; k2++) {
String foeldName = flds[k2].getName().replaceFirst(flds[k2].getName().substring(0, 1), flds[k2].getName().substring(0, 1).toUpperCase());
if(foeldName.equals(name)){
//关键。。。可访问私有变量
flds[k2].setAccessible(true);
//对属性赋值
flds[k2].set(obj, value);
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}