`

object to xml

 
阅读更多

http://www.cnblogs.com/java-pan/archive/2011/10/25/object_xml.html

 

 

摘要:本节主要介绍如何把Object对象转换为XML

引言:最近工作中因为工作需要,需要把两个系统之间的传递的报文修改一下(现在系统之间一般都是通过发送xml字符串传数据吧),最开始用的Jdom来实现的,由于jdom实现需要手写的代码太多,并且遇到了点问题,只有另想办法了,最后准备用Object转xml来实现,虽然这个代码不见得少多少,但是get和set方法都是通过工具自动生成,手写的就少很多了。

准备工作:

下载xstream-1.2.1.jar包,我的是1.2.1的版本,可以直接去百度搜索,下载的链接就不提供了。

XStream类

XStream是一个Java对象和XML相互转换的工具。提供了所有的基础类型、数组、集合等类型直接转换的支持。

因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。
XStream中的核心类就是XStream类,XStream对象相当Java对象和XML之间的转换器,转换过程是双向的。

创建XSteam对象的方式很简单,只需要new XStream()即可。 Java到xml,用toXML()方法。 Xml到Java,用fromXML()方法。

在没有任何设置默认情况下,java到xml的映射,是java成员名对应xml的元素名,java类的全名对应xml根元素的名字。

而实际中,往往是xml和java类都有了,要完成相互转换,必须进行别名映射。
别名配置包含三种情况:
1、类别名,用alias(String name, Class type)。
2、类成员别名,用aliasField(String alias, Class definedIn, String fieldName)
3、类成员作为属性别名,用 aliasAttribute(Class definedIn, String attributeName, String alias),单独命名没有意义,还要通过useAttributeFor(Class definedIn, String fieldName) 应用到某个类上。

需要转换的XML样式为

(实际开发中,一般都是xml的格式已知,你需要根据XML来建立object,然后拼装为指定格式的XML)

例如:(这个可是我项目中一个实际的报文发送XML格式哦,呵呵)

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

示例代码:

简单分析:按照这个xml,我需要建立三个java类,同时设置每个属性的get和set方法,假设三个类分别为:Root.java、MsgHead.java、MsgContent.java

Root.java

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

MsgHead.java

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

MsgContent.java

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

Object转XML得测试类,Test.java

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

运行截图:

从截图可以看出以上转换有两个问题:

(1).转换为无XML的定义头语句,即:<?xml version="1.0" encoding="UTF-8"?>

(2).msg_head和msg_content标签重复了一次

 

另外,需增加一个功能,把转换的xml以字符串的形式输出,在实际的系统交互中,也是传字符串而非文件。

 

由于时间的关系,今天就不调试了,明天有时间再调,也希望朋友们多提提意见,good luck.....

 

解决前面的两个问题(2011/10/24)

问题1:实际开发中系统之间的交互并非用的是xml文件,而是xml字符串,

故问题1通过把xml转换为字符串,然后在字符串前加xml的定义语句。

代码更改:(从新建XStream 对象开始,后面的都不需要了。代码改为如下:)

XStream xstream=new XStream();

String  xmlhead="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

String xml=xstream.toXML(root);

String resultxml=xmlhead+xml;//此句就是最后格式化输出的xml字符串,并且包括xml文件定义头

问题2:msg_head和msg_content标签重复了一次

对于这个问题,只需要把root.java文件中声明为ArrayList的变量改为如下:

 private MsgHead msg_head;
 private MsgContent msg_content;

同时分别设置get和set方法。

对于这种问题,有如下结论:

如果节点有重复的,就用ArrayList类型的变量,如果节点没有重复的,就声明为如上类型的变量。

 

经过今天的工作,发现以上的问题基本解决了,但是输出的xml字符串有换行和缩进

这样和和实际中的需求稍有不同,考虑如何设置通过XSrteam输出的字符串的格式?

去掉换行和缩进:

//匹配字符串中的空白字符(至少2次)、制表符、回车符、新行(换行)符

  Pattern p = Pattern.compile("\\s{2,}|\t|\r|\n");

  Matcher m = p.matcher(xml);
  finalresult = m.replaceAll("");

 

如果您比较细心的看过,会发现凡是下划线就会显示两个,即占用两个字符

这个和我的需求是不一样的,解决此种问题两种方法:

方式1:声名XStream对象的时候,用它的构造方法,代码如下:

  XStream xstream = new XStream(new XppDriver(new XmlFriendlyReplacer("-_", "_")));

方法2:用replace("__","_")来解决

finalresult=finalresult.replace("__","_");

 

分享到:
评论

相关推荐

    ObjectToXml

    ObjectToXml,object类型转换为xml类型,xml类型转换为object类型

    XStream实现Object与XML转换解决方案

    3. **对象转换**:使用`toXML()`方法将Java对象转换为XML字符串,使用`fromXML()`方法将XML字符串转换回Java对象。 4. **自定义转换规则**:如果需要自定义XML输出的格式,可以使用`alias()`方法为类或字段设置别名...

    C#Xml导入导出

    using (StreamWriter streamWriter = new StreamWriter("ObjectToXml.xml")) { serializer.Serialize(streamWriter, obj); } // 反序列化 using (StreamReader streamReader = new StreamReader("ObjectToXml.xml...

    Linq 大全 Linq To Sql Linq To DataSet Linq To Object Linq to Xml

    在标题和描述中提到的"Linq To Sql"、"Linq To DataSet"、"Linq To Object"和"Linq To Xml"是LINQ的四种主要应用方式,分别用于SQL数据库、DataSet、内存中的对象以及XML数据的查询。 1. **LINQ to SQL**: LINQ ...

    XML.rar_XML java_java xml_java xml Document sa_xml

    在提供的压缩文件中,“Save Document object to XML file - johnsdilon - BlogJava.htm”可能是一个关于这个话题的博客文章,可能包含了更详细的步骤和示例。而“www.pudn.com.txt”可能是另一个与XML和Java处理...

    xml转化obj

    public String objectToXml(Object obj) { return xstream.toXML(obj); } ``` 这个方法接受一个Java对象作为输入,然后返回对应的XML字符串。 3. **XML转对象**: ```java public &lt;T&gt; T xmlToObject(String ...

    xml与javabean的转换

    `fromXml()`方法用于从XML字符串或输入流创建JavaBean实例,而`toXml()`方法则将JavaBean对象转换为XML字符串。这两个方法使得在处理数据时能够灵活地在Java对象和XML文档之间切换。 首先,让我们深入理解`fromXml...

    linq to sql 、linq to xml 、linq to object

    在.NET环境中,LINQ主要分为三个主要部分:LINQ to SQL、LINQ to XML和LINQ to Objects。 1. **LINQ to SQL**: LINQ to SQL 是一种数据访问技术,它允许开发者使用C#或VB.NET的查询语法直接对SQL Server数据库...

    XML to JSON and JSON to XML converter

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换和存储的格式。XML是一种结构化标记语言,适用于描述复杂的数据结构,而JSON则以更简洁的格式来表示数据,通常用于...

    使用XStream, java Object 与xml之间的转换,以及写入SD卡

    String xml = xstream.toXML(new Person("John", 30)); System.out.println(xml); ``` 同样,如果有一个XML字符串,可以使用XStream反序列化回Java对象: ```java String xmlInput = "&lt;person&gt;&lt;name&gt;John&lt;/name&gt;...

    firstobject xml editor

    firstobject xml editor是一款编辑xml很好用的小软件,本版本为绿色单文件汉化版,(thx to mr w.jardan)官方版本2.4.2目前打开含中文的文件会死机。。。软件左边为树形结构,右侧为编辑区,比起其他文本编辑软件还是...

    应用源码之Xstream(解决xml和对象转换问题).zip

    String xml = xstream.toXML(yourObject); ``` - **反序列化(XML to Object)** 从XML字符串恢复Java对象,同样先创建Xstream实例,然后使用`fromXML()`方法: ```java YourObjectType yourObject = ...

    将xml文件读取转换为Object

    print(object_to_xml(game)) ``` 这将生成一个XML字符串,虽然格式可能与原始XML不同,但包含了相同的数据。 总结 在游戏开发中,将XML文件读取并转换为Object可以简化数据操作,提高代码的可读性和维护性。Python...

    详解XML,Object,Json转换与Xstream的使用

    public static String objectToXml(Object object) { XStream xstream = new XStream(); xstream.autodetectAnnotations(true); // 如果有注解,自动处理 return xstream.toXML(object); } ``` 同样,Xstream也...

    XStream:Object与Xml字符串 互相转换

    XStream是一个强大的Java库,它允许开发者方便地将Java对象序列化为XML,同时也能将XML数据反序列化回对应的Java对象。这个过程对于数据存储、网络传输或者XML配置文件的处理非常有用。在处理多个同名子节点以及节点...

    data mapping

    在“data mapping service object to xml”的场景中,我们关注的是如何将服务对象(Service Object)的数据映射到XML格式的数据结构上。这个过程涉及到了对象模型与XML之间的相互转换,对于理解和实现数据的标准化...

    LINQ中文教程(LINQ to Object、SQL、XML)

    本教程将深入探讨LINQ的各个方面,特别是`LINQ to Object`、`LINQ to SQL`和`LINQ to XML`。 ### LINQ to Object `LINQ to Object`是LINQ的基础,它允许我们对任何实现了`IEnumerable`或`IQueryable`接口的对象...

    01.JsonToXml.zip

    标题"01.JsonToXml.zip"暗示了这是一个关于Delphi编程的压缩包,其中包含的代码或工具专注于将JSON数据转换为XML格式,反之亦然。这在需要将JSON格式的数据用于不支持这种格式的应用程序,或者需要以更结构化的方式...

    xml to bean or bean to xml

    "xml to bean or bean to xml"这一主题涉及到如何将XML文档的数据映射到Java Bean对象上,以及如何将Bean对象的数据转换回XML格式。下面我们将详细探讨这两个过程。 1. XML到Bean转换: 这个过程通常称为XML的反...

    2017XML字符串转对象Object 实现工具

    {"body":{"class":"xmlToObject.vo.ReqBody","list":[{"class":"xmlToObject.vo.Foot","name":"红豆","rmb":"10元"},{"class":"xmlToObject.vo.Foot","name":"芋头","rmb":"100元"}]},"class":"xmlToObject.vo....

Global site tag (gtag.js) - Google Analytics