官网地址:http://x-stream.github.io/download.htmlhtml
下载地址:http://repo.maven.apache.org/maven2/com/thoughtworks/xstream/xstream/java
文档地址:http://x-stream.github.io/javadoc/index.html或 http://grepcode.com/project/repo1.maven.org/maven2/com.thoughtworks.xstream/xstream/git
简介:github
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了全部的基础类型、数组、集合等类型直接转换的支持。所以XML经常使用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。apache
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不须要其它辅助类和映射文件,使得XML序列化再也不繁琐。数组
XStream使用起来很是简单,不须要预先生成相关的辅助类,不须要映射文件。固然,使用简单也注定了它只能处理简单结构的 XML 文件。app
XStream 注解示例:框架
须要序列化用到的类:maven
@XStreamAlias("IISNEWS") public class IISNEWS { @XStreamAlias("MsgHeader") MsgHeader msgHeader; @XStreamAlias("HEADLINE") HEADLINE headline; @XStreamAlias("HEARTBEAT") @XStreamOmitField HEARTBEAT heartbeat; @XStreamAlias("RECOVERYCOMPL") @XStreamOmitField RECOVERYCOMPL recoverycompl; } @XStreamAlias("MsgHeader") class MsgHeader { String MsgDate; String MsgID; } @XStreamAlias("HEADLINE") class HEADLINE { String Action; String Language; String HeadlineDate; String NewsSeqNo; String ExpiryDate; List<SEARCHWORD> ATTRIBUTES = new ArrayList<SEARCHWORD>(); String NewsType; String GBContent; String DataContent; String STORY; } @XStreamAlias("SEARCHWORD") @XStreamConverter(value = ToAttributedValueConverter.class, strings = { "strVal" }) class SEARCHWORD { @XStreamAlias("Type") @XStreamAsAttribute() String type; String strVal; } @XStreamAlias("HEARTBEAT") class HEARTBEAT { } @XStreamAlias("RECOVERYCOMPL") class RECOVERYCOMPL { } public class TestNews { public static void main(String[] args) { XStream xStream = new XStream(); xStream.processAnnotations(IISNEWS.class); String xmlString = "";//以后xml文件内容 IISNEWS obj = (IISNEWS) xStream.fromXML(xmlString); System.out.println(obj.msgHeader.MsgDate); System.out.println(obj.msgHeader.MsgID); System.out.println(obj.headline.Action); System.out.println(obj.headline.Language); System.out.println(obj.headline.HeadlineDate); System.out.println(obj.headline.NewsSeqNo); System.out.println(obj.headline.ExpiryDate); System.out.println(obj.headline.ATTRIBUTES.size()); for (SEARCHWORD ele : obj.headline.ATTRIBUTES) { System.out.println(ele.type + " | " + ele.strVal); } System.out.println(obj.headline.NewsType); System.out.println(obj.headline.GBContent); System.out.println(obj.headline.DataContent); System.out.println(obj.headline.STORY); System.out.println(xStream.toXML(obj)); } }
XML 文件内容:工具
<IISNEWS> <MsgHeader> <MsgDate>20160526070940</MsgDate> <MsgID>HEADLINE</MsgID> </MsgHeader> <HEADLINE> <Action>INS</Action> <Language>en-us</Language> <HeadlineDate>20151117060215</HeadlineDate> <NewsSeqNo>HKEX-EPS20151117002365476</NewsSeqNo> <ExpiryDate>20151117000000</ExpiryDate> <ATTRIBUTES> <SEARCHWORD Type="CATE1">MjAwMDA=</SEARCHWORD> <SEARCHWORD Type="CATE2">Mjc5MDA=</SEARCHWORD> <SEARCHWORD Type="MARKETCODE">TUFJTg==</SEARCHWORD> </ATTRIBUTES> <NewsType>MAIN</NewsType> <DataContent>VHVlIDA2OjAyIERJU0NMQUlNRVIgKElzc3VlciBJbmZvLiBOb3YgMTcp</DataContent> <STORY>SEtFWC1FUFNfMjAxNTExMTdfMDAyMzY1NDc2LTAuUERGIB1odHRwOi8vYXBwZGF0YTIucXVvdGVwb3dlci5jb20vd2ViL3Fwd2ViL2F0dGFjaG1lbnRzL0hLRVgtRVBTXzIwMTUxMTE3XzAwMjM2NTQ3Ni0wLlBERiAd </STORY> </HEADLINE> </IISNEWS>
使用注解的方式转换须要注意:
由XML转到JAVA对象
XStream xstream = new XStream();
xstream.processAnnotations(IISNEWS.class);
由JAVA转到XML文件
XStream xstream = new XStream(); xstream.autodetectAnnotations(true);