XMLParser.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.tencent.common;
  2. import com.tencent.protocol.refund_query_protocol.RefundOrderData;
  3. import org.w3c.dom.Document;
  4. import org.w3c.dom.Element;
  5. import org.w3c.dom.Node;
  6. import org.w3c.dom.NodeList;
  7. import org.xml.sax.SAXException;
  8. import javax.xml.parsers.DocumentBuilder;
  9. import javax.xml.parsers.DocumentBuilderFactory;
  10. import javax.xml.parsers.ParserConfigurationException;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.util.ArrayList;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. /**
  18. * User: rizenguo
  19. * Date: 2014/11/1
  20. * Time: 14:06
  21. */
  22. public class XMLParser {
  23. /**
  24. * 从RefunQueryResponseString里面解析出退款订单数据
  25. * @param refundQueryResponseString RefundQuery API返回的数据
  26. * @return 因为订单数据有可能是多个,所以返回一个列表
  27. */
  28. public static List<RefundOrderData> getRefundOrderList(String refundQueryResponseString) throws IOException, SAXException, ParserConfigurationException {
  29. List list = new ArrayList();
  30. Map<String,Object> map = XMLParser.getMapFromXML(refundQueryResponseString);
  31. int count = Integer.parseInt((String) map.get("refund_count"));
  32. Util.log("count:" + count);
  33. if(count<1){
  34. return list;
  35. }
  36. RefundOrderData refundOrderData;
  37. for(int i=0;i<count;i++){
  38. refundOrderData = new RefundOrderData();
  39. refundOrderData.setOutRefundNo(Util.getStringFromMap(map,"out_refund_no_" + i,""));
  40. refundOrderData.setRefundID(Util.getStringFromMap(map,"refund_id_" + i,""));
  41. refundOrderData.setRefundChannel(Util.getStringFromMap(map,"refund_channel_" + i,""));
  42. refundOrderData.setRefundFee(Util.getIntFromMap(map,"refund_fee_" + i));
  43. refundOrderData.setCouponRefundFee(Util.getIntFromMap(map,"coupon_refund_fee_" + i));
  44. refundOrderData.setRefundStatus(Util.getStringFromMap(map,"refund_status_" + i,""));
  45. list.add(refundOrderData);
  46. }
  47. return list;
  48. }
  49. public static Map<String,Object> getMapFromXML(String xmlString) throws ParserConfigurationException, IOException, SAXException {
  50. //这里用Dom的方式解析回包的最主要目的是防止API新增回包字段
  51. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  52. DocumentBuilder builder = factory.newDocumentBuilder();
  53. InputStream is = Util.getStringStream(xmlString);
  54. Document document = builder.parse(is);
  55. //获取到document里面的全部结点
  56. NodeList allNodes = document.getFirstChild().getChildNodes();
  57. Node node;
  58. Map<String, Object> map = new HashMap<String, Object>();
  59. int i=0;
  60. while (i < allNodes.getLength()) {
  61. node = allNodes.item(i);
  62. if(node instanceof Element){
  63. map.put(node.getNodeName(),node.getTextContent());
  64. }
  65. i++;
  66. }
  67. return map;
  68. }
  69. }