待解析xml报文
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns1:queryBalanceBonResponse xmlns:ns1="http://chinasoftinc.com/BonWebservice/"> <result>0</result> <errorCode>0</errorCode> <errorMessage>查询余额成功</errorMessage> <paymentFlag>0</paymentFlag> <totalBalanceAvailable>20</totalBalanceAvailable> <balanceDetail> <balanceInfo> <balanceTypeFlag>0</balanceTypeFlag> <BalanceAvailable>20</BalanceAvailable> </balanceInfo> <balanceInfo> <balanceTypeFlag>1</balanceTypeFlag> <BalanceAvailable>0</BalanceAvailable> </balanceInfo> </balanceDetail> </ns1:queryBalanceBonResponse> </soapenv:Body> </soapenv:Envelope>报文对应的bean QueryModel .java
package cn.com.min.dom4j; import java.util.ArrayList; import java.util.List; public class QueryModel { private String result =""; private String errorCode =""; private String errorMessage =""; private String paymentFlag =""; private String totalBalanceAvailable =""; private List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>(); public String getResult() { return result; } public void setResult(String result) { this.result = result; } public String getErrorCode() { return errorCode; } public void setErrorCode(String errorCode) { this.errorCode = errorCode; } public String getErrorMessage() { return errorMessage; } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public String getPaymentFlag() { return paymentFlag; } public void setPaymentFlag(String paymentFlag) { this.paymentFlag = paymentFlag; } public String getTotalBalanceAvailable() { return totalBalanceAvailable; } public void setTotalBalanceAvailable(String totalBalanceAvailable) { this.totalBalanceAvailable = totalBalanceAvailable; } public List<BalanceInfoListModel> getBalanceInfos() { return balanceInfos; } public void setBalanceInfos(List<BalanceInfoListModel> balanceInfos) { this.balanceInfos = balanceInfos; } }BalanceInfoListModel.java
package cn.com.min.dom4j; public class BalanceInfoListModel { private String balanceTypeFlag = ""; private String BalanceAvailable = ""; public String getBalanceTypeFlag() { return balanceTypeFlag; } public void setBalanceTypeFlag(String balanceTypeFlag) { this.balanceTypeFlag = balanceTypeFlag; } public String getBalanceAvailable() { return BalanceAvailable; } public void setBalanceAvailable(String balanceAvailable) { BalanceAvailable = balanceAvailable; } }解析类 XML2Bean.java
package cn.com.min.dom4j; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.*; import org.dom4j.io.SAXReader; public class XML2Bean { public static String getNotNullNodeValue(Node n) { return getNotNullNodeValue(n, null); } public static String getNotNullNodeValue(Node n, String valueType) { if (n == null) return ""; else return n.getStringValue().trim(); } public static QueryModel xmlToQueryModel(String xml) throws DocumentException{ //异常直接抛出去了 Map map = new HashMap(); Document doc = DocumentHelper.parseText(xml); QueryModel queryModel =new QueryModel(); Element rootElrm= doc.getRootElement(); // map.put("soapenv","http://schemas.xmlsoap.org/soap/envelope/"); // map.put("ns1","http://chinasoftinc.com/BonWebservice/"); Element el = rootElrm.element("Body"); Element node = el.element("queryBalanceBonResponse"); System.out.println(node.asXML()); // XPath x = doc.createXPath("//soapenv:Body/ns1:queryBalanceBonResponse"); // x.setNamespaceURIs(map); // List nodelist = x.selectNodes(doc); // Node node = (Node) nodelist.get(0); //System.out.println(node.asXML()); //queryModel.setErrorCode(XML2Bean.getNotNullNodeValue(node.selectSingleNode("result"))); //System.out.println(node.selectSingleNode("result").getText()); queryModel.setResult(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorCode"))); queryModel.setErrorMessage(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorMessage"))); queryModel.setPaymentFlag(XML2Bean.getNotNullNodeValue(node.selectSingleNode("paymentFlag"))); queryModel.setTotalBalanceAvailable(XML2Bean.getNotNullNodeValue(node.selectSingleNode("totalBalanceAvailable"))); List<Node> nodes = node.selectNodes("balanceDetail/balanceInfo"); if (nodes != null && nodes.size()>0) { List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>(); for(Node nod :nodes){ BalanceInfoListModel balanceInfoListModel = new BalanceInfoListModel(); balanceInfoListModel.setBalanceTypeFlag(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("balanceTypeFlag"))); balanceInfoListModel.setBalanceAvailable(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable"))); System.out.println("-->"+XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable"))); System.out.println("-->"+nod.selectSingleNode("balanceTypeFlag").getText()); balanceInfos.add(balanceInfoListModel); } queryModel.setBalanceInfos(balanceInfos); } return queryModel; } public static void main(String[] args) { String xml1 ="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body><ns1:queryBalanceBonResponse xmlns:ns1='http://chinasoftinc.com/BonWebservice/'><result>0</result><errorCode>0</errorCode><errorMessage>查询余额成功</errorMessage><paymentFlag>0</paymentFlag><totalBalanceAvailable>20</totalBalanceAvailable><balanceDetail><balanceInfo><balanceTypeFlag>0</balanceTypeFlag><BalanceAvailable>200</BalanceAvailable></balanceInfo><balanceInfo><balanceTypeFlag>1</balanceTypeFlag><BalanceAvailable>0</BalanceAvailable></balanceInfo></balanceDetail></ns1:queryBalanceBonResponse></soapenv:Body></soapenv:Envelope>"; try { QueryModel queryModel = XML2Bean.xmlToQueryModel(xml1); System.out.println(queryModel.getErrorCode()); } catch (DocumentException e) { System.out.println(e); } } }以上源码可直接使用
其中主要的解析方法 public static QueryModelxmlToQueryModel(String xml)
其中使用两种方式进行含命名空间的xml进行解析
public static QueryModel xmlToQueryModel(String xml) throws DocumentException{ //异常直接抛出去了 Document doc = DocumentHelper.parseText(xml); QueryModel queryModel =new QueryModel(); Element rootElrm= doc.getRootElement(); Element el = rootElrm.element("Body"); Element node = el.element("queryBalanceBonResponse"); System.out.println(node.asXML()); queryModel.setErrorCode(XML2Bean.getNotNullNodeValue(node.selectSingleNode("result"))); queryModel.setResult(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorCode"))); queryModel.setErrorMessage(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorMessage"))); queryModel.setPaymentFlag(XML2Bean.getNotNullNodeValue(node.selectSingleNode("paymentFlag"))); queryModel.setTotalBalanceAvailable(XML2Bean.getNotNullNodeValue(node.selectSingleNode("totalBalanceAvailable"))); List<Node> nodes = node.selectNodes("balanceDetail/balanceInfo"); if (nodes != null && nodes.size()>0) { List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>(); for(Node nod :nodes){ BalanceInfoListModel balanceInfoListModel = new BalanceInfoListModel(); balanceInfoListModel.setBalanceTypeFlag(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("balanceTypeFlag"))); balanceInfoListModel.setBalanceAvailable(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable"))); System.out.println("-->"+XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable"))); System.out.println("-->"+nod.selectSingleNode("balanceTypeFlag").getText()); balanceInfos.add(balanceInfoListModel); } queryModel.setBalanceInfos(balanceInfos); } return queryModel; } public static QueryModel xmlToQueryModel(String xml) throws DocumentException{ //异常直接抛出去了 Map map = new HashMap(); Document doc = DocumentHelper.parseText(xml); QueryModel queryModel =new QueryModel(); Element rootElrm= doc.getRootElement(); map.put("soapenv","http://schemas.xmlsoap.org/soap/envelope/"); map.put("ns1","http://chinasoftinc.com/BonWebservice/"); XPath x = doc.createXPath("//soapenv:Body/ns1:queryBalanceBonResponse"); x.setNamespaceURIs(map); List nodelist = x.selectNodes(doc); Node node = (Node) nodelist.get(0); queryModel.setErrorCode(XML2Bean.getNotNullNodeValue(node.selectSingleNode("result"))); queryModel.setResult(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorCode"))); queryModel.setErrorMessage(XML2Bean.getNotNullNodeValue(node.selectSingleNode("errorMessage"))); queryModel.setPaymentFlag(XML2Bean.getNotNullNodeValue(node.selectSingleNode("paymentFlag"))); queryModel.setTotalBalanceAvailable(XML2Bean.getNotNullNodeValue(node.selectSingleNode("totalBalanceAvailable"))); List<Node> nodes = node.selectNodes("balanceDetail/balanceInfo"); if (nodes != null && nodes.size()>0) { List<BalanceInfoListModel> balanceInfos =new ArrayList<BalanceInfoListModel>(); for(Node nod :nodes){ BalanceInfoListModel balanceInfoListModel = new BalanceInfoListModel(); balanceInfoListModel.setBalanceTypeFlag(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("balanceTypeFlag"))); balanceInfoListModel.setBalanceAvailable(XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable"))); System.out.println("-->"+XML2Bean.getNotNullNodeValue(nod.selectSingleNode("BalanceAvailable"))); System.out.println("-->"+nod.selectSingleNode("balanceTypeFlag").getText()); balanceInfos.add(balanceInfoListModel); } queryModel.setBalanceInfos(balanceInfos); } return queryModel; }其中主要用的用到两个java包 dom4j-1.6.1.jar jaxen-1.1.1.jar
