package com.soap.util;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;

/**
 * soap XML解析
 * @author Roger
 */
@SuppressWarnings({"unchecked","unused"})
public class SoapXmlUtil {
	
	public static void main(String[] args) {
		
		StringBuffer xml = new StringBuffer();
		xml.append("");
		xml.append("");
		xml.append("");
		xml.append("");
		xml.append("");
		xml.append("
"); xml.append("string"); xml.append("string"); xml.append("string"); xml.append("string"); xml.append("
"); xml.append(""); xml.append(""); xml.append("string"); xml.append("string"); xml.append("string"); xml.append("decimal"); xml.append("decimal"); xml.append(""); xml.append(""); xml.append("string"); xml.append("string"); xml.append("string"); xml.append("decimal"); xml.append("decimal"); xml.append(""); xml.append(""); xml.append("
"); xml.append(""); xml.append("
"); xml.append(""); try { System.out.println("开始解析 xml....."); SOAPMessage msg = formatSoapString(xml.toString()); SOAPBody body = msg.getSOAPBody(); Iterator iterator = body.getChildElements(); List> list = new ArrayList>(); List> orgList = printBody(iterator, null, list); } catch (SOAPException e) { e.printStackTrace(); } } public static List> printBody( Iterator iterator, String side, List> list) { while (iterator.hasNext()) { SOAPElement element = iterator.next(); System.out.println(element.getNodeName()); if ("DATA".equals(element.getNodeName())) { Iterator it = element.getChildElements(); Map infoMap = new HashMap(); SOAPElement el = null; String pk_corp = ""; // 公司主键 String unitcode = ""; // 公司编码 String unitname = ""; // 公司名称 String fathercorp = ""; // 上级公司ID String ts = ""; // 最新更新时间 String corplevel = ""; // 公司层级 String isseal = ""; // 是否封存 while (it.hasNext()) { el = it.next(); if (el.getNodeName().equals("pk_corp")) { pk_corp = el.getValue(); infoMap.put("pk_corp", pk_corp); } if (el.getNodeName().equals("unitcode")) { unitcode = el.getValue(); infoMap.put("unitcode", unitcode); } if (el.getNodeName().equals("unitname")) { unitname = el.getValue(); infoMap.put("unitname", unitname); } if (el.getNodeName().equals("fathercorp")) { fathercorp = el.getValue(); infoMap.put("fathercorp", fathercorp); } if (el.getNodeName().equals("ts")) { ts = el.getValue(); infoMap.put("ts", ts); } if (el.getNodeName().equals("corplevel")) { corplevel = el.getValue(); infoMap.put("corplevel", corplevel); } if (el.getNodeName().equals("isseal")) { isseal = el.getValue(); infoMap.put("isseal", isseal); } } list.add(infoMap); } if (null == element.getValue() && element.getChildElements().hasNext()) { printBody(element.getChildElements(), side + "-----", list); } } return list; } /**  * 把soap字符串格式化为SOAPMessage  *   * @param soapString  * @return  * @see [类、类#方法、类#成员]  */ public static SOAPMessage formatSoapString(String soapString) { MessageFactory msgFactory; try { msgFactory = MessageFactory.newInstance(); SOAPMessage reqMsg = msgFactory.createMessage(new MimeHeaders(), new ByteArrayInputStream(soapString.getBytes("UTF-8"))); reqMsg.saveChanges(); return reqMsg; } catch (Exception e) { e.printStackTrace(); return null; } } }


备注: 解析的xml标签与标签之间不能有空格,否则回去先如下异常

开始解析 xml.....
Exception in thread "main" java.lang.ClassCastException: com.sun.xml.internal.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPElement
	at com.soap.util.SoapXmlUtil.printBody(SoapXmlUtil.java:79)
	at com.soap.util.SoapXmlUtil.main(SoapXmlUtil.java:67)