最近项目中需要用到XML配置一些信息,百度了一下,发现使用XStream相对简单,简单配置一下即可进行转换,方法如下:
首先添加依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.3</version>
</dependency>
IDEA会自动下载依赖的JAR包,下载完成后就可以编码了,主体代码如下:
先建立实体类,TransBean,该对象引用另外一个实体类FieldBean,代码如下:
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如下:
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;
}
}
测试类代码如下
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();
}
}
输入内容如下:
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
DEMO下载地址为: XML和JAVA对象互转