XML格式数据请求的解析与返回XML数据的组织方法
来源:互联网 发布:长春大学教务处软件 编辑:程序博客网 时间:2024/04/30 15:46
因为做服务器很久了,一直没有很好的整理代码的习惯。有个朋友问起了这个问题,觉得可以考虑整理出来供大家参考了。
一、XML格式数据请求的解析,两种方法分别如下:
传入参数举例:<?xml version="1.0" encoding="UTF-8"?><SyncAppOrderReq><MsgType>SyncAppOrderReq</MsgType><AppID>300001489326</AppID></SyncAppOrderReq>
第一种:借助dom4j包,来实现,直接将传入的字符串转为Map。
①定义一个转换的方法XMLUtil
package com.mmpay.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
* XML解析工具。XML转map
* @date 2014-11-22 18:39
* @author Luoyuze 361336079@qq.com
*
*/
public class XMLUtil {
/**
* 将xml转换为Map
* @param xml
* @return
* @throws Exception
*/
public static Map<String, Object> xml2Map(String xml) throws Exception {
return xmlDoc2Map(DocumentHelper.parseText(xml));
}
/**
* 将xml文件转成Map
* @param xmlDoc
* @return
*/
public static Map<String, Object> xmlDoc2Map(Document xmlDoc) {
Map<String, Object> map = new HashMap<String, Object>();
if (xmlDoc == null) {
return map;
}
Element root = xmlDoc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
Element e = (Element) iterator.next();
List list = e.elements();
if (list.size() > 0) {
map.put(e.getName(), Dom2Map(e, map));
} else {
map.put(e.getName(), e.getText());
}
}
return map;
}
private static Map Dom2Map(Element e, Map map) {
List list = e.elements();
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList();
if (iter.elements().size() > 0) {
Map m = Dom2Map(iter, map);
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName().equals("java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if (obj.getClass().getName().equals("java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
} else {
map.putAll(m);
}
} else {
if (map.get(iter.getName()) != null) {
Object obj = map.get(iter.getName());
if (!obj.getClass().getName().equals("java.util.ArrayList")) {
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if (obj.getClass().getName().equals("java.util.ArrayList")) {
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
} else {
map.put(iter.getName(), iter.getText());
}
}
}
} else {
map.put(e.getName(), e.getText());
}
return map;
}
}
②直接拿传入的参数进行转换,然后就可以直接从map中拿数据来使用。
Map<String, Object> map = XMLUtil.xml2Map(builder.toString());
第二种:借助XStream来实现。
①首先要定义一个类,来映射XML中携带的数据。
这个类的详细信息略了,根据需求自己来写,属性、构造方法和get、set方法。
②利用XStream转换成对象。
XStream xstream=new XStream(new DomDriver()); //注意:不是new Xstream(); 否则报错:
xstream.processAnnotations(SyncAppOrderReq.class);
xstream.alias("SyncAppOrderReq", SyncAppOrderReq.class);
SyncAppOrderReq xml = (SyncAppOrderReq) xstream.fromXML(content);
二、组织返回XML格式数据,与上面对应,也写两种。
第一种:最简单的方法了,就是直接拼接字符串。
这个不用细说,都懂得。
第二种:借助XStream来实现。
①首先要定义一个类,来映射XML中携带的数据。
②利用XStream将对象转换成字符串。
SyncAppOrderResp syncAppOrderResp = new SyncAppOrderResp();
syncAppOrderResp.sethRet(0);
syncAppOrderResp.setMsgType("");
syncAppOrderResp.setVersion("");
XStream xstream = new XStream(new DomDriver());
xstream.alias("SyncAppOrderResp", SyncAppOrderResp.class);
String xml = xstream.toXML(syncAppOrderResp);
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + xml;
代码都是基于中移互联的支付相关接口写的。
- XML格式数据请求的解析与返回XML数据的组织方法
- 解析XML格式的数据
- jquery ajax 请求、解析返回来的xml数据
- android 微信支付返回XML格式数据的解析方法
- 解析HTTP POST方式请求的xml数据、本地XML文件数据, 并返回JSON字符串
- javax.xml.bind.annotation 包解析xml @XmlElement @XmlAttribute接收请求返回xml格式数据
- 【js与jquery】jquery对服务器端返回xml格式数据的解析和处理
- 基于xml的springMVC请求与数据返回
- XMLHttpRequest处理xml格式的返回数据
- SQL返回XML格式的数据
- 访问页面返回XML格式的数据
- 访问页面返回XML格式的数据
- ajax处理返回的xml格式数据
- Spring MVC返回XML格式的数据
- Spring MVC返回XML格式的数据
- .net 饼状图,,, ajax异步请求数据 返回xml格式的数据
- JS中涉及到xml格式的数据解析方法
- kettle(PDI)解析xml、json等格式数据的方法
- Maximum Subarray
- libcurl
- yii2.0系列四:随时更新的小技巧
- css前端头尾部固定,中间内容可滑动
- 手机号和电话验证js
- XML格式数据请求的解析与返回XML数据的组织方法
- Android 图片模糊、高斯模糊、毛玻璃的三种实现方法
- 浅谈HTTP中Get与Post的区别(转载)
- iOS开发--iOS类微信返回导航WebViewController(AXWebViewController)
- Cygwin 与 MinGW/MSYS/MSYS2,如何选择?
- socket编程[oc](粘包、半包处理)
- 浏览器文本不能被选中 以及火狐浏览器的兼容
- Intellij IDEA自动部署项目至远程FTP服务器
- Kali Linux 网络扫描秘籍 第八章 自动化 Kali 工具