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);

相關文章
相關標籤/搜索