dom4j 对含有命名空间的xml进行解析

待解析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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值