XML和对象相互转换的方法
最近项目中需要用到XML配置一些信息,百度了一下,发现使用XStream相对简单,简单配置一下即可进行转换,方法如下:
首先添加依赖
[html] <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.3</version> </dependency>
IDEA会自动下载依赖的JAR包,下载完成后就可以编码了,主体代码如下:
先建立实体类,TransBean,该对象引用另外一个实体类FieldBean,代码如下:
[java] package com.springapp.mvc; import java.util.List; /** * Created by zhangqq on 2016/9/19. */ public class TransBean { private String id; private List<FieldBean> parmList; public String getId() { return id; } public void setId(String id) { this.id = id; } public List<FieldBean> getParmList() { return parmList; } public void setParmList(List<FieldBean> parmList) { this.parmList = parmList; } @Override public String toString() { System.out.println("转换对象成功,ID为:"+id+"列表长度"+parmList.size()); return String.valueOf(parmList.size()); } }
FieldBean如下:
[java] package com.springapp.mvc; /** * Created by zhangqq on 2016/9/19. */ public class FieldBean { private String key; private String uName; private String isSign; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getuName() { return uName; } public void setuName(String uName) { this.uName = uName; } public String getIsSign() { return isSign; } public void setIsSign(String isSign) { this.isSign = isSign; } }
测试类代码如下
[java] package com.springapp.mvc; import com.thoughtworks.xstream.XStream; import org.springframework.util.StringUtils; import java.io.IOException; /** * Created by zhangqq on 2016/9/19. */ public class TestXml { public static void main(String[] args) { testXml(); } public static String testXml() { /** * 读取XML文件内容 */ // String filePath = FileUtils.getFilePath("trans/DelCard.xml"); TransBean transBean = new TransBean(); // try { String xmlStr ;//= FileUtils.readFile(filePath); xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<TransId id=\"DelCard\">\n" + " <PnrCallBack>\n" + " <Field key=\"CmdId\" uName=\"CmdId\" isSign=\"true\"/>\n" + " <Field key=\"RespCode\" uName=\"RespCode\" isSign=\"true\"/>\n" + " <Field key=\"RespDesc\" uName=\"RespDesc\" isSign=\"false\"/>\n" + " <Field key=\"MerCustId\" uName=\"MerCustId\" isSign=\"true\"/>\n" + " <Field key=\"UsrCustId\" uName=\"UsrCustId\" isSign=\"true\"/>\n" + " <Field key=\"CardId\" uName=\"CardId\" isSign=\"true\"/>\n" + " <Field key=\"ChkValue\" uName=\"ChkValue\" isSign=\"false\"/>\n" + "\n" + " </PnrCallBack>\n" + "</TransId>\n"; System.out.println("XML源文件:"+xmlStr); if(!StringUtils.isEmpty(xmlStr)) { /** * 实例Xstream对象 * */ XStream xmlUtils =new XStream(); /** *设置XML节点别名为TransId,属性名 ,依据xml文件进行设定 * */ xmlUtils.processAnnotations(TransBean.class); xmlUtils.alias("TransId", TransBean.class); xmlUtils.aliasAttribute(TransBean.class, "id", "id"); xmlUtils.aliasField("PnrCallBack", TransBean.class, "parmList"); xmlUtils.processAnnotations(FieldBean.class); xmlUtils.alias("Field", FieldBean.class); xmlUtils.aliasAttribute(FieldBean.class, "key", "key"); xmlUtils.aliasAttribute(FieldBean.class, "uName", "uName"); xmlUtils.aliasAttribute(FieldBean.class, "isSign", "isSign"); /** * 执行转换 * */ transBean = (TransBean) xmlUtils.fromXML(xmlStr); String toXml = xmlUtils.toXML(transBean); System.out.println("对象转换为XML:"+toXml); } // } catch (IOException e) { // e.printStackTrace(); // } return transBean.toString(); } }
输入内容如下:
[html] XML源文件:<?xml version="1.0" encoding="UTF-8"?> <TransId id="DelCard"> <PnrCallBack> <Field key="CmdId" uName="CmdId" isSign="true"/> <Field key="RespCode" uName="RespCode" isSign="true"/> <Field key="RespDesc" uName="RespDesc" isSign="false"/> <Field key="MerCustId" uName="MerCustId" isSign="true"/> <Field key="UsrCustId" uName="UsrCustId" isSign="true"/> <Field key="CardId" uName="CardId" isSign="true"/> <Field key="ChkValue" uName="ChkValue" isSign="false"/> </PnrCallBack> </TransId> 对象转换为XML:<TransId id="DelCard"> <PnrCallBack> <Field key="CmdId" uName="CmdId" isSign="true"/> <Field key="RespCode" uName="RespCode" isSign="true"/> <Field key="RespDesc" uName="RespDesc" isSign="false"/> <Field key="MerCustId" uName="MerCustId" isSign="true"/> <Field key="UsrCustId" uName="UsrCustId" isSign="true"/> <Field key="CardId" uName="CardId" isSign="true"/> <Field key="ChkValue" uName="ChkValue" isSign="false"/> </PnrCallBack> </TransId> 转换对象成功,ID为:DelCard列表长度7
转载自:http://blog.csdn.net/dreamfly88/article/details/52587931