您的位置:首页 > 编程语言 > Java开发

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

2014-05-21 15:39 330 查看
下面是一个用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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: