原文链接: http://blog.csdn.net/simonchi/article/details/38926817
首先去官网下载响应JAR包
http://xstream.codehaus.org/index.html
最少需要两个jar包,一个xstream.jar,一个是xmlpull.jar
首先来看下java对象到xml的转换
- package xml;
- class PhoneNumber {
- private int code;
- private int number;
- public int getCode() {
- return code;
- }
- public void setCode(int code) {
- this.code = code;
- }
- public int getNumber() {
- return number;
- }
- public void setNumber(int number) {
- this.number = number;
- }
- }
- public class Person {
- private String username;
- private int age;
- private PhoneNumber pn;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public PhoneNumber getPn() {
- return pn;
- }
- public void setPn(PhoneNumber pn) {
- this.pn = pn;
- }
- }
以上是一个普通的java对象
- package xml;
- import com.thoughtworks.xstream.XStream;
- import com.thoughtworks.xstream.io.xml.StaxDriver;
- public class XmlUtils {
- private static XStream xs = new XStream(new StaxDriver());
- public static String objToXml(Object obj) {
- //xs.aliasPackage(name, pkgName);
- return xs.toXML(obj);
- }
- public static void main(String[] args) {
- Person p = new Person();
- p.setAge(26);
- p.setUsername("chiwei");
- PhoneNumber pn = new PhoneNumber();
- pn.setCode(188);
- pn.setNumber(67101080);
- p.setPn(pn);
- xs.alias("person", Person.class);
- String xml = objToXml(p);
- Person per = (Person)xs.fromXML(xml);
- System.out.println(xml);
- System.out.println(per.getUsername());
- }
- }
以上代码,先是生成一个对象,给各个属性赋值,然后调用toXML将对象转换为xml格式的普通文本,注意在转换前调用了alias目的是为了将xml.Person重命名为person
<?xml version="1.0" ?><person><username>chiwei</username><age>26</age><pn><code>188</code><number>67101080</number></pn></person>
这里xstream实例化时候传入了StaxDriver表示A driver using the StAX API to create XML reader and writer.
如果你使用xpp3driver,你需要引入该jar包
后面则根据上面转换后的xml继续转换成相应的对象Person
<?xml version="1.0" ?><person><username>chiwei</username><age>26</age><pn><code>188</code><number>67101080</number></pn></person>
chiwei
很简单
- xs.alias("person", Person.class);
- xs.useAttributeFor(Person.class,"username");
- xs.aliasAttribute(Person.class, "username","name");
这种情况是将属性写到XML元素的里面作为属性,而不是单独作为一个子元素,如下所示:
<person name="chiwei">
<age>26</age>
</person>
------------------------------------------------------------------------------- 华丽的分割线 -------------------------------------------------------------------------------------------
以上的例子的确很简单,下面看看一些别的处理
- xs.aliasField("res_type", SLIR.class, "resType");
该 方法是用于将SLIR类中的resType属性在XML元素中显示为res_type,这里看到有一个下划线_,其实在xstream实例化的时候,如果 没有用到XmlFriendlyNameCoder的话,可能下划线_就会变成__,因为在这里_其实是转移符,所以我们实例化xstream的时候应该 如下:
- private static XStream xs = new XStream(new DomDriver(null,new XmlFriendlyNameCoder("_-", "_")));
- xs.useAttributeFor(RequestMode.class, "type");
该方法的目的是将RequestMode类中的type属性作为该XML元素的内部属性
<requestmode type="PASSIVE"/>
最后再来看下,XML元素同时又属性和值得时候怎么处理
- <msid enc="ASC" type="MSISDN">13505602768</msid>
如上所示,msid元素拥有两个属性,同时又拥有自己的值,这时候,在做转化的时候,必须自定义转换器converter才行
- import com.thoughtworks.xstream.converters.Converter;
- import com.thoughtworks.xstream.converters.MarshallingContext;
- import com.thoughtworks.xstream.converters.UnmarshallingContext;
- import com.thoughtworks.xstream.io.HierarchicalStreamReader;
- import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
- public class ReqMsidConverter implements Converter {
- @SuppressWarnings("rawtypes")
- @Override
- public boolean canConvert(Class type) {
- // TODO Auto-generated method stub
- return type.equals(Msid.class);
- }
- @Override
- public void marshal(Object source, HierarchicalStreamWriter writer,
- MarshallingContext context) {
- // TODO Auto-generated method stub
- Msid msid = (Msid)source;
- writer.addAttribute("enc", msid.getEnc());
- writer.addAttribute("type", msid.getType());
- writer.setValue(msid.getMsid());
- }
- @Override
- public Object unmarshal(HierarchicalStreamReader reader,
- UnmarshallingContext context) {
- // TODO Auto-generated method stub\
- Msid msid = new Msid();
- msid.setEnc(reader.getAttribute("enc"));
- msid.setType(reader.getAttribute("type"));
- msid.setMsid(reader.getValue());
- return msid;
- }
- }
定义完该转换器后,将其注册到xstream上即可
- xs.registerConverter(new ReqMsidConverter());
相关推荐
【标题】:“xStream 实现xml与 java对象的转换” 在Java开发中,XML作为一种常见的数据交换格式,常用于存储和传输数据。然而,XML与Java对象之间的转换并不总是直观和简便的。这时,xStream库应运而生,它提供了...
XStream是一个轻量级、高性能的库,能够将Java对象序列化为XML,同时也能将XML反序列化回Java对象,实现XML和Java对象的互相转换。 首先,我们需要引入XStream库。在给定的描述中提到了两个依赖文件:xstream-1.3.1...
XStream 是一个强大的 Java 库,它允许程序员轻松地将 Java 对象序列化为 XML,同时也能从 XML 数据中反序列化回原来的 Java 对象。这个功能在数据持久化、网络传输或者配置文件存储等方面非常有用。XStream 的设计...
总的来说,xStream是Java开发中处理XML和JSON的强大工具,它提供了简单易用的API来实现对象与这两种数据格式之间的转换。通过理解和掌握xStream的使用,开发者可以更高效地处理数据序列化和反序列化任务。
通过简单的API调用,开发者可以将复杂的Java对象结构转化为易于理解和处理的XML格式。 - **反序列化**: 反之,它也能将XML字符串解析回原来的Java对象。这使得XML数据能够被Java应用程序轻松地读取和操作。 2. **...
在Java开发中,数据序列...总之,XStream是一个强大且易于使用的工具,可以帮助开发者轻松地在XML和Java对象之间进行转换。通过理解其工作原理和提供的功能,我们可以更有效地在Java项目中利用XML进行数据存储和交换。
通过以上介绍,我们可以看出XStream在处理XML和Java对象之间转换时的便利性。它不仅简化了开发流程,还提供了丰富的定制选项,使得XML处理更加灵活和安全。在实际项目中,尤其是涉及到XML数据交换和持久化存储时,...
XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...
在IT领域,数据交换和存储经常需要在不同的格式之间转换,比如XML和JSON。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于数据交换和配置文件,而JSON(JavaScript Object Notation)则因其简洁性...
总的来说,XStream是Java开发中处理XML序列化和反序列化的强大工具,其简单易用的API使得XML与Java对象之间的转换变得轻松而高效。通过熟练掌握XStream的使用,开发者可以更好地在Java应用中利用XML进行数据交换和...
在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...
它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.20 实体类和测试类详见博客 ...
在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为可以存储或传输的形式,然后再...在理解和掌握这些注解的使用后,你可以更高效地处理Java对象与XML之间的转换,从而提高工作效率。
它提供了简洁、直观的API来处理XML,使得开发者可以轻松地在Java对象和XML之间进行转换。xStream的核心功能是基于对象关系映射(ORM)的概念,它自动将Java类的实例转换为XML文档,并能将XML文档转换回相应的Java...
总的来说,“使用XStream是实现XML与Java对象的转换(6)--持久化”这个主题涵盖了如何使用XStream进行对象的持久化操作,包括创建XStream实例、序列化和反序列化,以及文件I/O操作。了解这些知识点对于需要在Java项目...
XStream库则是Java世界中一个强大的工具,它能够方便地实现XML和JSON与Java对象之间的互相转换。这篇博客文章,标题为“xStream学习xml,JASON,JAVA对象转换”,显然会探讨如何利用XStream来处理这两种数据格式。 ...
**XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...
标题 "xStream完美转换XML、JSON" 指的是使用xStream库在Java中进行XML与JSON数据格式之间的转换。xStream是一个强大的库,它提供了一种简单的方式来序列化和反序列化Java对象到XML,反之亦然。在这个场景中,它同样...