xStream 学习笔记 - Java对象与XML相互转换简单示例

官网地址: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.htmlhttp://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);

相关文章
相关标签/搜索