官網地址: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);