官网地址:http://x-stream.github.io/download.html
下载地址:http://repo.maven.apache.org/maven2/com/thoughtworks/xstream/xstream/
文档地址:http://x-stream.github.io/javadoc/index.html或 http://grepcode.com/project/repo1.maven.org/maven2/com.thoughtworks.xstream/xstream/
简介:
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。
XStream使用起来非常简单,不需要预先生成相关的辅助类,不需要映射文件。当然,使用简单也注定了它只能处理简单结构的 XML 文件。
XStream 注解示例:
需要序列化用到的类:
@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);