1、认识XML解析技术

1.1、XML相关概念

(1)DTD:XML语法规则,是XML文件的验证机制,可以通过比较XML文档和DTD文件看文档是否符合规范,元素和标签是否使用正确。

(2)XML是SOA的基础。

1.2、XML处理技术

(1)为了使用XML,我们需要通过XML处理器或XMLAPI来访问数据,目前JAXP提供了2种处理XML的方法:DOM和SAX。

①DOM:DOM通过编程方式对XML文档中数据及结构进行访问,基于XML文档在内存中的树状结构。其缺点是将整个XML文档装入内存需要很大开销。

②SAX:基于事件驱动,用到一段解析一段,解决了DOM占用内存大的问题,但其缺点是无法随机访问文档。

(2)为了解决DOM和SAX的问题,一种基于流的StreamAPIforXML(简称StAX)出现了,目前已加入到JDK6的JAXP1.4里面,StAX也是基于事件驱动。

(3)DOM、SAX和StAX都是从文档结构出发处理XML的,但很多应用程序仅仅关注文档数据本身,所以XML数据绑定技术应运而生。

数据绑定:是指将数据从存储媒介(XML文档和数据库中)抽取出来,并通过程序表示这些数据的过程,即把数据绑定到虚拟机能够理解并且可以操作的某种内存结构中。

XML绑定框架:Castor,JAXB,JiBX,Quick,Zeus等。

2、XML处理利器:XStream

2.1、XStream概述

(1)XStream是一套简洁易用的开源框架,用于将Java对象序列化为XML,或者将XML反序列化为Java对象。XStream主要特点:

(2)XStream架构组成:

Converters(转换器):当XStream遇到需要转换的对象时,它会委派给合适的转换器实现。

IO(输入/输出):XStream是通过HierarchicalStreamWriter和HierarchicalStreamReader从底层XML数据中抽象而来,分别用于序列化和反序列化操作。

Context(上下文):XStream序列化反序列化对象时会创建2个类MarshallingContext和UnmarshallingContext,由塔门来处理数据并委派给合适的转换器。

Facade(统一入口):将上面的3点集成在一起,以统一的接口开放给用户使用。

2.2、快速入门

(1)创建一个XStream,并指定XML解析器

XStreamxstream=newXStream(newDomDriver());

如果不指定解析器,XStream会默认采用XPP(XMLPullParser)解析器,XPP是一种高速解析器。

(2)示例如下:

2.3、使用XStream别名

(1)在上面的示例中,java对象的全类名对应XML文件的根元素,属性名对应XML文件的节点元素,但在实际情况中,java对象和XML对象可能都已经定义好了名字,这时就需要使用别名映射。

XStream有3种别名配置情况:

类别名:用alias(Stringname,Classtype)。

类成员别名:用aliasField(Stringalias,ClassdefinedIn,StringfieldName)。

类成员作为属性别名:用aliasAttribute(ClassdefinedIn,StringattributeName,Stringalias),单独命名没有意义,还要通过useAttributeFor(ClassdefinedIn,StringfieldName)应用到某个类上。

(2)通过别名修改2.2中示例:

2.4、XStream转换器

在开发过程中,有时候需要转换一些自定义的类型,只要实现Converter接口,并调用XStream的registerConverter()方法注册转换器就可以。

2.5、XStream注解

(1)XStream常用注解如下:

(2)使用

XStreamxstream=newXStream(newDomDriver());

加载对象有2种方式:

①方式一:

xstream.processAnnotations(AAA.class);

xstream.processAnnotations(BBB.class);

②方式二:

xstream.autodetectAnnotations(true);//自动加载注解bean,而且还缓存了标注的对象

2.6、流化对象

(1)XStream为ObjectInputStream和ObjectOutputStream提供了替代实现,允许以对象流的方式进行XML序列化或反序列化操作。前面是基于DOM的XML解析器读取的XML,这里我们显然应该使用流的方式进行解析。

示例如下:

(2)使用PrettyWriter和CompactWriter的区别就在于PrettyWriter会格式化生成的XML,而CompactWriter会压缩生成的XML。

2.7、持久化API

(1)XStream提供了一套简单的方式,可以将集合中的对象持久化到文件中,如:XmlArrayList、XmlSet、XmlMap等。

(2)在创建集合之前,还需要指定一个持久化策略PersistenceStrategy。

2.8、处理JSON

(1)XML在WebService中有不可动摇的地位,但是在大多数web应用中,还是多采用轻量级的JSON作为数据交换格式。

(2)XStream提供了JettisonMappedXmlDriver和JsonHierarchicalStreamDriver来完成java对象和json的转换工作。

示例如下:

(3)JettisonMappedXmlDriver和JsonHierarchicalStreamDriver的区别:

①JettisonMappedXmlDriver生成的是压缩的JSON,而JsonHierarchicalStreamDriver生成的是格式化的JSON。

②要想将JSON转换为对象,只能使用JettisonMappedXmlDriver。

3、其他常见的O/XMapping开源项目

JAXB、XMLBeans、Cstor、JiBX的比较:

4、与SpringOXM整合

4.1、SpringOXM概述

(1)SpringOXM对主流O/XMapping框架做了一个统一的抽象和封装,Marshaller和Unmarshaller是SpringOXM两个核心接口。Marshaller用于将对象转成XML,Unmarshaller用于将XML转成对象。

(2)各O/XMapping组件包装器如下:

4.2、在Spring中进行配置

(1)XStreamMarshaller配置实例:

5、小结

(1)java应用程序的XML数据绑定可以归纳为2种方式:

根据XML文档生成Java语言代码(如JAXB、XMLBeans、Castor)。

使用某种形式的映射绑定方法,也就是设定Java类如何与XML进行关联(如XStream、Castor、JiBX)。

(2)2种方式比较:

使用由Schema或DTD定义的稳定文档结构,并且该结构适合应用程序的需要,则代码生成方法可能是最佳选择。

如果使用现有的Java类,或者希望使用类的结构,该结构反映应用程序对数据的用法,而不是XML结构,则映射方法是最佳选择。

总结

以上就是本文关于spring使用OXM进行对象XML映射解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

oxm java_spring使用OXM进行对象XML映射解析相关推荐

  1. java oxm_spring使用OXM进行对象XML映射解析

    1.认识XML解析技术 1.1.XML相关概念 (1)DTD:XML语法规则,是XML文件的验证机制,可以通过比较XML文档和DTD文件看文档是否符合规范,元素和标签是否使用正确. (2)XML是SO ...

  2. Hibernate - 对象关系映射文件(*.hbm.xml)详解

    对象关系映射文件,即POJO 类和数据库的映射文件*.hbm.xml(映射文件的扩展名为 .hbm.xml). POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据 ...

  3. 第 19 章 XML映射

    第 19 章 XML映射 注意这是Hibernate 3.0的一个实验性的特性.这一特性仍在积极开发中. 19.1. 用XML数据进行工作 Hibernate使得你可以用XML数据来进行工作,恰如你用 ...

  4. java对象关系映射ROM

    一.对象关系映射ORM概述 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术:简单的说,ORM是通过使 ...

  5. Symfony2Book04:Doctrine03-对象关系映射(ORM)

    Doctrine是一个基于PHP的对象关系映射(ORM),它构建在强大的数据库抽象层(DBAL)之上,透明地为PHP对象提供持久化. 你可以从官方文档中读到更多关于Doctrine ORM 的内容. ...

  6. Hibernate之对象关系映射文件

    一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...

  7. Mybatis学习--Mapper.xml映射文件

    简介 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 映射文件中有很多属性,常用的就是parameterType(输入类型 ...

  8. Mapper.xml映射文件---Mybatis学习笔记(八)

    Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. parameterType(输入类型) 1.#{}与${} #{}实现的是 ...

  9. mybatis入门(二)之XML 映射配置文件

    转载自   mybatis XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: c ...

最新文章

  1. JS三大对象中常用方法集锦
  2. 关于Android中的乱码
  3. vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决:
  4. 使用sublime text 2开发Javacript和jQuery
  5. 个人笔记本上win10+yolov3+python+tensorflow+keras训练自己的识别模型
  6. mysql8和5.7区别_MySQL 8、MySQL 5.7和Percona server for MySQL性能比较
  7. SAP License:SAP IDES常用功能及测试环境
  8. pacemaker+mysql+drbd
  9. NLP学习—24.Pre-trained Word Embedding—ELMO、GPT、Bert
  10. Spring Boot 中统一异常处理最佳实践介绍
  11. c语言中指,C语言程序设计中指教学要点分析.doc
  12. excel 公式快速填充下拉方法(WPS表格)
  13. DW2019HTML中没有文本对象,Dreamweaver CC2019文字或图片添加空连接方法
  14. VS无法定位程序输入点于动态链接库
  15. mysql 连接时间_MySQL连接时间问题
  16. 深大数据库系统实验4——Using mysql and php to implement the Car Share Reservation Database system
  17. Master HA彻底解密
  18. ps2键盘测试软件,PS2键盘51测试程序2
  19. 自学脚手架——《热学》 by 李椿(第一,二,三,四,五章)
  20. 压缩文件的后缀html,rar是什么格式

热门文章

  1. java基本单位,Java语言中的【】是程序的基本单位。
  2. 新浪微博AppKey大集合(share)
  3. 爬虫学习(12):爬取诗词名句网并且下载保存
  4. Cortex-M芯片低功耗开发
  5. QA——运行性能(一)
  6. ASUS EZ Installer v1.02.11
  7. 第一周作业(软件过程与项目管理)
  8. Br 2020最新版下载地址 一键安装Windows
  9. AXURE表白原型(拼图+心形照片墙+表白信)
  10. BT5:DecoratorNodes源码解析