package cc.mrbird.febs.pay.util;
|
|
import org.w3c.dom.Document;
|
import org.w3c.dom.Element;
|
import org.w3c.dom.Node;
|
import org.w3c.dom.NodeList;
|
import org.xml.sax.SAXException;
|
|
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.ParserConfigurationException;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
/**
|
* User: rizenguo
|
* Date: 2014/11/1
|
* Time: 14:06
|
*/
|
public class XMLParser {
|
|
/**
|
* 从RefunQueryResponseString里面解析出退款订单数据
|
* @param refundQueryResponseString RefundQuery API返回的数据
|
* @return 因为订单数据有可能是多个,所以返回一个列表
|
|
public static List<RefundOrderData> getRefundOrderList(String refundQueryResponseString) throws IOException, SAXException, ParserConfigurationException {
|
List list = new ArrayList();
|
|
Map<String,Object> map = XMLParser.getMapFromXML(refundQueryResponseString);
|
|
int count = Integer.parseInt((String) map.get("refund_count"));
|
Util.log("count:" + count);
|
|
if(count<1){
|
return list;
|
}
|
|
RefundOrderData refundOrderData;
|
|
for(int i=0;i<count;i++){
|
refundOrderData = new RefundOrderData();
|
|
refundOrderData.setOutRefundNo(Util.getStringFromMap(map,"out_refund_no_" + i,""));
|
refundOrderData.setRefundID(Util.getStringFromMap(map,"refund_id_" + i,""));
|
refundOrderData.setRefundChannel(Util.getStringFromMap(map,"refund_channel_" + i,""));
|
refundOrderData.setRefundFee(Util.getIntFromMap(map,"refund_fee_" + i));
|
refundOrderData.setCouponRefundFee(Util.getIntFromMap(map,"coupon_refund_fee_" + i));
|
refundOrderData.setRefundStatus(Util.getStringFromMap(map,"refund_status_" + i,""));
|
list.add(refundOrderData);
|
}
|
|
return list;
|
}
|
*/
|
public static Map<String,Object> getMapFromXML(String xmlString) throws ParserConfigurationException, IOException, SAXException {
|
|
//这里用Dom的方式解析回包的最主要目的是防止API新增回包字段
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
InputStream is = Util.getStringStream(xmlString);
|
Document document = builder.parse(is);
|
|
//获取到document里面的全部结点
|
NodeList allNodes = document.getFirstChild().getChildNodes();
|
Node node;
|
Map<String, Object> map = new HashMap<String, Object>();
|
int i=0;
|
while (i < allNodes.getLength()) {
|
node = allNodes.item(i);
|
if(node instanceof Element){
|
map.put(node.getNodeName(),node.getTextContent());
|
}
|
i++;
|
}
|
return map;
|
|
}
|
|
|
}
|