一、xml一種格式的數據轉換為對象
pom.xml引入
<!--javaBean和XML的雙向轉換-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
xml文件模板
<?xml version="1.0" encoding="GBK"?> <MESSAGE> <MESSAGEHEAD> <MESSAGEID/> <SRC/> </MESSAGEHEAD> <MESSAGEBODY> <TRANLIST> <TRAN_DATE/> <TRAN_TIME/> </TRANLIST> </MESSAGEBODY> </MESSAGE>
后台需要創建
1、 總類Total
class Total private static final String headInfo = "<?xml version=\"1.0\" encoding=\"GBK\"?>"; @XStreamAlias("MESSAGEHEAD") private Head head; @XStreamAlias("MESSAGEBODY") private Body body;
// getter setter
2、頭部信息Head
class Head @XStreamAlias("MESSAGEID") private String messageId; @XStreamAlias("SRC") private String src; // getter settter
3、Body,明細類集合
class Body @XStreamImplicit(itemFieldName = "TRANLIST") private List<Detail> detail;
4、Detail明細類
class Detail @XStreamConverter(value = XStreamDateConverter.class) @XStreamAsAttribute @XStreamAlias("TRAN_DATE") private Date tranDate; @XStreamAlias("TRAN_TIME") private String tranTime;
// getter setter
需要強調的是: String類型不需要轉換,其他的類型都可以通過實現接口SingleValueConverter來實現轉換格式,編寫一個轉換日期Date格式的轉換,其他類似
public class XStreamDateConverter implements SingleValueConverter { private final String YMD = "yyyyMMdd"; SimpleDateFormat dateFormat = new SimpleDateFormat(YMD); @Override public String toString(Object o) { String result = null; if (o instanceof Date) { Date date = (Date) o; result = dateFormat.format(date); } return result; } @Override public Object fromString(String s) { Date date = null; if (s != null && !"".equals(s)) { try { date = dateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } } return date; } @Override public boolean canConvert(Class aClass) { return Date.class == aClass; } }
基礎工作已經完成,接下來就是將xml轉換為對象實體
public static Total transXmlToObject(String xmlBody) { XStream xStream = new XStream(); xStream.alias("MESSAGE", Total.class); xStream.alias("MESSAGEHEAD", Head.class); xStream.alias("MESSAGEBODY", Body.class); xStream.alias("TRANLIST", Detail.class); xStream.processAnnotations(new Class[]{Total.class, Head.class, Body.class, Detail.class}); Object object = xStream.fromXML(xmlBody); Total data = (Total) object; return data; }
