package demo;


import java.io.ByteArrayInputStream;

import java.io.UnsupportedEncodingException;

import java.util.Iterator;

import java.util.Map;

/*

 *dom4j

*/

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;


import com.google.common.collect.Maps;

/**

 * 

 * @author wangqm1

 * 

 * 程序功能是:实现将xml格式的报文转化成map格式

 * 

 * 1、首先调用setGenerateXML()方方法组装成xml,然后调用dom4jAnalyze()将所有元素转化为map

 *

 */

public class ParseXML {

public static void main(String[] args) {

try {

System.out.println(dom4jAnalyze(setGenerateXML()));

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("不支持此编码格式");

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("不能生成Document");

}

}

 static Map<String, String> dom4jAnalyze(String parameter)

throws DocumentException, UnsupportedEncodingException {

Map<String, String> map = Maps.newConcurrentMap();

// 创建SAXReader读取器,专门用于读取xml

Document doc = new SAXReader().read(new ByteArrayInputStream(parameter

.getBytes("GBK")));

Iterator<?> it = doc.getRootElement().elementIterator();

while (it.hasNext()) {

Element el = (Element) it.next();

map.put(el.getName(), el.getText());

Iterator<?> child = el.elementIterator();

while (child.hasNext()) {

Element ele = (Element) child.next();

map.put(ele.getName(), ele.getText());

Iterator<?> eleChild = ele.elementIterator();

while (eleChild.hasNext()) {

Element chel = (Element) eleChild.next();

map.put(chel.getName(), chel.getText());

}

}

}

return map;

}

 private static String setGenerateXML() {

Document doc = setDocument() ;

Element ele = doc.addElement("stream");

Element E3RDPAYNO = ele.addElement("E3RDPAYNO");

E3RDPAYNO.setText("100599");

Element ORDERMODE = ele.addElement("ORDERMODE");

ORDERMODE.setText("01");

Element ORDERDATE = ele.addElement("ORDERDATE");

ORDERDATE.setText("null");

Element ORDERTIME = ele.addElement("ORDERTIME");

ORDERTIME.setText("12:30:02");

Element ORDERNO = ele.addElement("ORDERNO");

ORDERNO.setText("123456");

Element CURRID = ele.addElement("CURRID");

CURRID.setText("01");

Element ORDERAMT = ele.addElement("ORDERAMT");

ORDERAMT.setText("100");

Element MEMO = ele.addElement("MEMO");

MEMO.setText("");

Element NOTIFYMODE = ele.addElement("NOTIFYMODE");

NOTIFYMODE.setText("01");

Element NOTIFYURL = ele.addElement("NOTIFYURL");

NOTIFYURL.setText("http://106.39.35.10/finExchange/cncbpay/back");

Element RISKLEVEL = ele.addElement("RISKLEVEL");

RISKLEVEL.setText("00");

Element SUPPTCARDTYPE = ele.addElement("SUPPTCARDTYPE");

SUPPTCARDTYPE.setText("01");

Element TTL = ele.addElement("TTL");

TTL.setText("0NOTIFYSCOPE");

Element MEMBERID = ele.addElement("MEMBERID");

MEMBERID.setText("Y");

Element NOTIFYSCOPE = ele.addElement("NOTIFYSCOPE");

NOTIFYSCOPE.setText("01");

Element ISSAFEINF = ele.addElement("ISSAFEINF");

ISSAFEINF.setText("Y");

Element REFERER = ele.addElement("REFERER");

REFERER.setText("pay.ucfpay.com");

return doc.asXML().replace("\n", "");

   }

private static Document setDocument() {

Document doc = DocumentHelper.createDocument();

  doc.setXMLEncoding("GBK");

// doc.setXMLEncoding("UTF-8");

return doc;

   }

}