XML与对象映射技术精讲

        在学习XML技术之前,先了解下DTD和XML Schema.

        DTD和XML Schema都是用来验证XML文档是否和我们预计的格式一致的。

        DTD是一套关于标记符的语法规则。它是XML1.0规范的一部分。是XML文件的验证机制。属于xml文件组成的一部分,它是一种保证xml文档格式争取的有效方法,可以通过比较xml文档和dtd文档查看文档是否符合规范,以及元素和标签的使用是否正确。

       XML  Schema指定XML  Schema定义语言,该语言提供了描述XML1.0文档结果和限制其内容的工具,其中包括可以利用xml namespace命名工具的工具。模式语言自身用xml1.0表示并使用了名称空间。很大程度上重构了XML 1.0 DTD的能力,解决了DTD的许多局限性,使用的越来越多了起来。

       

      XML文档的读取和处理技术,有两种方法 DOM 和SAX.

      DOM是一次性将整个XML文档结构加载到内存中,成树状结构进行处理。

      SAX是以一种事件驱动方式处理XML,将XML文档从头开始读,读到一个元素,调用相应的事件处理器处理这个元素所带数据,可以随时停止,但灵活性就低了。

      近来又出来了一个基于流的Stream API for XMl方式,综合了两者。不仅提高了XML处理速度,而且很好的兼顾了灵活性。

 

      DOM、SAX、StAX技术都是从XML角度处理文档和建立模型,关注了XML文档结构。

      如果对于只关注XML数据信息,目前针对XML数据绑定出现了一系列框架。如JAXB、JiBX、Quick、Zeus等。

                                                                                                                                                                                                                           

 

 

           XStream开源类库,java对象序列化为XML或者将XML反序列化为Java对象。

  XStream架构组成

  •  Converters(转换器)
         当XStream 遇到需要转换器,它会委派给合适的转换器实现,XStream为通用类型提供了许多转换器实现。
  •  IO(输入、输出)
        XStream通过接口HierarchicalStramWriter 和HierarchicalStramReader从底层XML数据中抽象而来,分别用于序列化和反序列化操作。
  • Context(上下文引用)
      当XStream序列化和反序列化对象时,它会创建两个类MarshallingContext和UnmarshallingContext,由它们来处理数据并委派合适的转换器。
       XStream提供了三种上下文的默认实现,它们之间存在细微的差别。默认值可以通过方法XStream.setMode()调整,可选值为:、
    XStream.XPATH_REFERENCES(默认),通过XPath引用来标识重复的引用
    XStream.ID_REFERENCES;使用ID引用来标识重复的引用
    XStream.NO_REFERENCES;对象作为树形结构,重复的引用被视为两个不同的对象,循环引用会导致异常产生,这种模式速度快,占用内存少。
  • Facade(统一入口)

     作为XStream统一入口点,它将上面所提及的重要组件集成在一起,以统一的接口开放出来。

 

 

     

     使用方式:

     XStream xStream=new XStream(new DomDriver());

     xStream.toXML(Object obj,OutputStream stream);

     Object  obj=xStream.fromXML(InputStream stream);

 

 

    XStream可以通过编码方式对xml进行转换,还支持基于注解的方式进行转换。

    下面对XStream常用注解做出解释说明:

注解说明作用目标
@XStreamAlias别名注解类、字段
@XStreamAsAttribute转换成属性字段
@XStreamOmitField忽略字段字段
@XStreamConverter注入转换器对象
@XStreamImplicit隐式集合集合字段

 

 使用注解方式的写法如下:

    XStream xStream=new XStream(new DomDriver());

    xStream.processAnnotations(Class.class);

    或者自动加载注解Bean

   xStream.autodetectAnnotations(true);

 

   

 

总结:java应用程序的xml数据绑定我们可以归纳为两种方式:

一、根据XML文档文法生成java语言代码(如JAXB、XMLBeans、Castor)

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

 

 

     

 

 

     

 

 

       

 

 

 

 

 

 

 

 

 

     

 

       

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值