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

本文介绍XStream库的基本使用方法,包括XML与Java对象之间的转换,并通过具体示例展示了如何利用注解进行序列化与反序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官网地址:http://x-stream.github.io/download.html

下载地址:http://repo.maven.apache.org/maven2/com/thoughtworks/xstream/xstream/

文档地址:http://x-stream.github.io/javadoc/index.htmlhttp://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);

 

 

转载于:https://my.oschina.net/kind790/blog/685971

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值