package com.matrix.component.wechat.externalInterface.common; 
 | 
  
 | 
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; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |