XStream把xml转换为多个对象组合的JavaBean例子

               

下面是一个用XStream把xml数据转换为多个对象组合的javabean的例子:

xml报文格式:

<?xml version="1.0" encoding="GBK" standalone="no"?>
<B2CRes>
    <interfaceName></interfaceName>
    <interfaceVersion></interfaceVersion>
    <orderInfo>
        <orderDate></orderDate>
        <curType></curType>
        <merID></merID>
        <subOrderInfoList>
          <subOrderInfo>
            <orderid></orderid>
            <amount></amount>
            <installmentTimes></installmentTimes>
            <merAcct></merAcct>
            <tranSerialNo></tranSerialNo>
            </subOrderInfo>
            ……
          <subOrderInfo>
            <orderid></orderid>
            <amount></amount>
            <installmentTimes></installmentTimes>
            <merAcct></merAcct>
            <tranSerialNo></tranSerialNo>
         </subOrderInfo>
      </subOrderInfoList>
    </orderInfo>
    <custom>
        <verifyJoinFlag></verifyJoinFlag>
        <JoinFlag></JoinFlag>
        <UserNum></UserNum>
    </custom>
    <bank>
        <TranBatchNo></TranBatchNo>
        <notifyDate></notifyDate>
        <tranStat></tranStat>
        <comment></comment>
    </bank>
</B2CRes>


下面是对应xml的相关Java类:

public class SubOrderInfo {
  private String orderid;//支付订单号
  private String amount;//订单金额
  private String installmentTimes;//分期付款期数1、3、6、9、12、18、24;1代表全额付款
  private String merAcct;//商户账号
  private String tranSerialNo;//银行指令序号
 
    //......get set方法

}


public class Custom {
 
    private String verifyJoinFlag;//检验联名标志
    private String JoinFlag;//客户联名标志
    private String UserNum;//联名会员号
    

   //...get set方法   
    
}

public class Bank {
 
    private String TranBatchNo;//批次号
    private String notifyDate;//返回通知日期时间 YYYYMMDDHHmmss
    private String tranStat;//订单处理状态 1-交易成功,已清算 2-交易失败 3-交易可疑
    private String comment;//备注

   //    get   set方法
    
}

public class SubOrderInfoList {
    
  private SubOrderInfo[] subOrderInfo;  // SubOrderInfoList类里有多个subOrderInfo详细订单

   //  get set 方法

}


public class OrderInfo {
  private String orderDate;
  private String curType;
  private String merID;
  private SubOrderInfo[] subOrderInfoList;  //List<SubOrderInfo> subOrderInfoList; 此处也可以这样写

      // get set 方法

}

public class B2CRes {
  private String interfaceName;
  private String interfaceVersion;
  private OrderInfo orderInfo;
  private Custom custom;
  private Bank bank;

    //get set 方法

}


测试类;

public class TestXStream {
    public static void main(String[] args) {
        try {
            
        
        String data="<?xml  version=\"1.0\" encoding=\"GBK\" standalone=\"no\" ?><B2CRes><interfaceName>ICBC_PERBANK_B2C</interfaceName><interfaceVersion>1.0.0.11</interfaceVersion><orderInfo><orderDate>20100901162142</orderDate><curType>001</curType><merID>0200EC20001119</merID><subOrderInfoList><subOrderInfo><orderid>0000144</orderid><amount>100</amount><installmentTimes>1</installmentTimes><merAcct>0200026009018372212</merAcct><tranSerialNo>HFG000000000000421</tranSerialNo></subOrderInfo><subOrderInfo><orderid>201009011621421</orderid><amount>120</amount><installmentTimes>1</installmentTimes><merAcct>0200026009018372212</merAcct><tranSerialNo>HFG000000000000422</tranSerialNo></subOrderInfo></subOrderInfoList></orderInfo><custom><verifyJoinFlag>0</verifyJoinFlag><JoinFlag></JoinFlag><UserNum></UserNum></custom><bank><TranBatchNo>000000000000098</TranBatchNo><notifyDate>20100910174050</notifyDate><tranStat>1</tranStat><comment>交易成功!</comment></bank></B2CRes>";
         XStream xstream = new XStream(new DomDriver());   
           
            //设置了这个别名才能识别下面 xml 中的 类对象节点的别名,否则要用类全限名称   
            xstream.alias("B2CRes", B2CRes.class);   
            xstream.alias("orderInfo", OrderInfo.class);   
            xstream.alias("subOrderInfo", SubOrderInfo.class);   
            xstream.alias("custom", Custom.class);   
            xstream.alias("bank", Bank.class);   
            B2CRes b2cres=(B2CRes)xstream.fromXML(data);
            //从XML文件读取
            //B2CRes b2cres=(B2CRes)xstream.fromXML(new FileReader(new File("D:/myworkspace/test/src/XStreamtest/b2cres/B2CRes22.xml")) );
            System.out.println("接口名称:"+b2cres.getInterfaceName());
            OrderInfo orderInfo=b2cres.getOrderInfo();
            System.out.println("商户账号:"+orderInfo.getMerID());
            SubOrderInfo subOrderInfo=orderInfo.getSubOrderInfoList()[0];
            System.out.println("支付订单ID:"+subOrderInfo.getOrderid());
            System.out.println("银行序列号:"+subOrderInfo.getTranSerialNo());
            Custom custom=b2cres.getCustom();
            System.out.println("检验联名标志:"+custom.getVerifyJoinFlag());
            Bank bank=b2cres.getBank();
            System.out.println("备注:"+bank.getComment());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}


           

猜你喜欢

转载自blog.csdn.net/qq_44945073/article/details/89481544