在学习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(转换器)
- IO(输入、输出)
- Context(上下文引用)
- 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)