`

XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以

 
阅读更多

原文链接:   http://blog.csdn.net/simonchi/article/details/38926817

 

首先去官网下载响应JAR包

http://xstream.codehaus.org/index.html

最少需要两个jar包,一个xstream.jar,一个是xmlpull.jar

首先来看下java对象到xml的转换

  1. package xml;  
  2.   
  3. class PhoneNumber {  
  4.       
  5.     private int code;  
  6.       
  7.     private int number;  
  8.   
  9.     public int getCode() {  
  10.         return code;  
  11.     }  
  12.   
  13.     public void setCode(int code) {  
  14.         this.code = code;  
  15.     }  
  16.   
  17.     public int getNumber() {  
  18.         return number;  
  19.     }  
  20.   
  21.     public void setNumber(int number) {  
  22.         this.number = number;  
  23.     }  
  24.       
  25. }  
  26.   
  27. public class Person {  
  28.   
  29.     private String username;  
  30.       
  31.     private int age;  
  32.       
  33.     private PhoneNumber pn;  
  34.   
  35.     public String getUsername() {  
  36.         return username;  
  37.     }  
  38.   
  39.     public void setUsername(String username) {  
  40.         this.username = username;  
  41.     }  
  42.   
  43.     public int getAge() {  
  44.         return age;  
  45.     }  
  46.   
  47.     public void setAge(int age) {  
  48.         this.age = age;  
  49.     }  
  50.   
  51.     public PhoneNumber getPn() {  
  52.         return pn;  
  53.     }  
  54.   
  55.     public void setPn(PhoneNumber pn) {  
  56.         this.pn = pn;  
  57.     }  
  58.       
  59. }  


以上是一个普通的java对象

  1. package xml;  
  2.   
  3. import com.thoughtworks.xstream.XStream;  
  4. import com.thoughtworks.xstream.io.xml.StaxDriver;  
  5.   
  6. public class XmlUtils {  
  7.   
  8.     private static XStream xs = new XStream(new StaxDriver());  
  9.       
  10.     public static String objToXml(Object obj) {  
  11.         //xs.aliasPackage(name, pkgName);  
  12.         return xs.toXML(obj);  
  13.     }  
  14.       
  15.     public static void main(String[] args) {  
  16.         Person p = new Person();  
  17.         p.setAge(26);  
  18.         p.setUsername("chiwei");  
  19.         PhoneNumber pn = new PhoneNumber();  
  20.         pn.setCode(188);  
  21.         pn.setNumber(67101080);  
  22.         p.setPn(pn);  
  23.         xs.alias("person", Person.class);  
  24.         String xml = objToXml(p);  
  25.         Person per = (Person)xs.fromXML(xml);  
  26.         System.out.println(xml);  
  27.         System.out.println(per.getUsername());  
  28.     }  
  29. }  


以上代码,先是生成一个对象,给各个属性赋值,然后调用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

 

很简单

 

  1. xs.alias("person", Person.class);  
  2.         xs.useAttributeFor(Person.class,"username");  
  3.         xs.aliasAttribute(Person.class"username","name");  

这种情况是将属性写到XML元素的里面作为属性,而不是单独作为一个子元素,如下所示:
<person name="chiwei">
  <age>26</age>
</person>

------------------------------------------------------------------------------- 华丽的分割线 -------------------------------------------------------------------------------------------

以上的例子的确很简单,下面看看一些别的处理

  1. xs.aliasField("res_type", SLIR.class"resType");  

该 方法是用于将SLIR类中的resType属性在XML元素中显示为res_type,这里看到有一个下划线_,其实在xstream实例化的时候,如果 没有用到XmlFriendlyNameCoder的话,可能下划线_就会变成__,因为在这里_其实是转移符,所以我们实例化xstream的时候应该 如下:

  1. private static XStream xs = new XStream(new DomDriver(null,new XmlFriendlyNameCoder("_-""_")));  

 

  1. xs.useAttributeFor(RequestMode.class"type");  

该方法的目的是将RequestMode类中的type属性作为该XML元素的内部属性

<requestmode type="PASSIVE"/>

 

最后再来看下,XML元素同时又属性和值得时候怎么处理

  1. <msid enc="ASC" type="MSISDN">13505602768</msid>  

如上所示,msid元素拥有两个属性,同时又拥有自己的值,这时候,在做转化的时候,必须自定义转换器converter才行

  1. import com.thoughtworks.xstream.converters.Converter;  
  2. import com.thoughtworks.xstream.converters.MarshallingContext;  
  3. import com.thoughtworks.xstream.converters.UnmarshallingContext;  
  4. import com.thoughtworks.xstream.io.HierarchicalStreamReader;  
  5. import com.thoughtworks.xstream.io.HierarchicalStreamWriter;  
  6.   
  7. public class ReqMsidConverter implements Converter {  
  8.   
  9.     @SuppressWarnings("rawtypes")  
  10.     @Override  
  11.     public boolean canConvert(Class type) {  
  12.         // TODO Auto-generated method stub  
  13.         return type.equals(Msid.class);  
  14.     }  
  15.   
  16.     @Override  
  17.     public void marshal(Object source, HierarchicalStreamWriter writer,  
  18.             MarshallingContext context) {  
  19.         // TODO Auto-generated method stub  
  20.         Msid msid = (Msid)source;  
  21.         writer.addAttribute("enc", msid.getEnc());  
  22.         writer.addAttribute("type", msid.getType());  
  23.         writer.setValue(msid.getMsid());  
  24.     }  
  25.   
  26.     @Override  
  27.     public Object unmarshal(HierarchicalStreamReader reader,  
  28.             UnmarshallingContext context) {  
  29.         // TODO Auto-generated method stub\  
  30.         Msid msid = new Msid();  
  31.         msid.setEnc(reader.getAttribute("enc"));  
  32.         msid.setType(reader.getAttribute("type"));  
  33.         msid.setMsid(reader.getValue());  
  34.         return msid;  
  35.     }  
  36.   
  37. }  

定义完该转换器后,将其注册到xstream上即可

  1. xs.registerConverter(new ReqMsidConverter()); 
分享到:
评论

相关推荐

    xStream 实现xml与 java对象的转换

    【标题】:“xStream 实现xml与 java对象的转换” 在Java开发中,XML作为一种常见的数据交换格式,常用于存储和传输数据。然而,XML与Java对象之间的转换并不总是直观和简便的。这时,xStream库应运而生,它提供了...

    好用的xStream XML和JAVA对象互相转换的简单示例

    XStream是一个轻量级、高性能的库,能够将Java对象序列化为XML,同时也能将XML反序列化回Java对象,实现XML和Java对象的互相转换。 首先,我们需要引入XStream库。在给定的描述中提到了两个依赖文件:xstream-1.3.1...

    Xstream_java对象和xml的互相转换

    XStream 是一个强大的 Java 库,它允许程序员轻松地将 Java 对象序列化为 XML,同时也能从 XML 数据中反序列化回原来的 Java 对象。这个功能在数据持久化、网络传输或者配置文件存储等方面非常有用。XStream 的设计...

    xStream转换xml和json源码

    总的来说,xStream是Java开发中处理XML和JSON的强大工具,它提供了简单易用的API来实现对象与这两种数据格式之间的转换。通过理解和掌握xStream的使用,开发者可以更高效地处理数据序列化和反序列化任务。

    XStream在Java对象和XML之间相互转换

    通过简单的API调用,开发者可以将复杂的Java对象结构转化为易于理解和处理的XML格式。 - **反序列化**: 反之,它也能将XML字符串解析回原来的Java对象。这使得XML数据能够被Java应用程序轻松地读取和操作。 2. **...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    在Java开发中,数据序列...总之,XStream是一个强大且易于使用的工具,可以帮助开发者轻松地在XML和Java对象之间进行转换。通过理解其工作原理和提供的功能,我们可以更有效地在Java项目中利用XML进行数据存储和交换。

    xstream轻松解析xml到java对象

    通过以上介绍,我们可以看出XStream在处理XML和Java对象之间转换时的便利性。它不仅简化了开发流程,还提供了丰富的定制选项,使得XML处理更加灵活和安全。在实际项目中,尤其是涉及到XML数据交换和持久化存储时,...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...

    xstream将xml文档转换成json对象

    在IT领域,数据交换和存储经常需要在不同的格式之间转换,比如XML和JSON。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于数据交换和配置文件,而JSON(JavaScript Object Notation)则因其简洁性...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    总的来说,XStream是Java开发中处理XML序列化和反序列化的强大工具,其简单易用的API使得XML与Java对象之间的转换变得轻松而高效。通过熟练掌握XStream的使用,开发者可以更好地在Java应用中利用XML进行数据交换和...

    xml解析及使用XStream实现javaBean与xml之间的转换

    在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...

    xstream实现xml和java bean 互相转换

    它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.20 实体类和测试类详见博客 ...

    使用XStream是实现XML与Java对象的转换(3)--注解

    在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为可以存储或传输的形式,然后再...在理解和掌握这些注解的使用后,你可以更高效地处理Java对象与XML之间的转换,从而提高工作效率。

    Java用xStream拼接xml

    它提供了简洁、直观的API来处理XML,使得开发者可以轻松地在Java对象和XML之间进行转换。xStream的核心功能是基于对象关系映射(ORM)的概念,它自动将Java类的实例转换为XML文档,并能将XML文档转换回相应的Java...

    使用XStream是实现XML与Java对象的转换(6)--持久化

    总的来说,“使用XStream是实现XML与Java对象的转换(6)--持久化”这个主题涵盖了如何使用XStream进行对象的持久化操作,包括创建XStream实例、序列化和反序列化,以及文件I/O操作。了解这些知识点对于需要在Java项目...

    xStream学习xml,JASON,JAVA对象转换

    XStream库则是Java世界中一个强大的工具,它能够方便地实现XML和JSON与Java对象之间的互相转换。这篇博客文章,标题为“xStream学习xml,JASON,JAVA对象转换”,显然会探讨如何利用XStream来处理这两种数据格式。 ...

    XStream在JavaBean与XML/JSON 之间相互转换

    **XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...

    转载 xStream完美转换XML、JSON

    标题 "xStream完美转换XML、JSON" 指的是使用xStream库在Java中进行XML与JSON数据格式之间的转换。xStream是一个强大的库,它提供了一种简单的方式来序列化和反序列化Java对象到XML,反之亦然。在这个场景中,它同样...

Global site tag (gtag.js) - Google Analytics