streaming api_XML的Streaming API简介(StAX)

StAX概述

自成立以来,用于XML处理的Java API(JAXP)提供了两种处理XML的方法-文档对象模型(DOM)方法(使用标准对象模型表示XML文档)和XML简单API(SAX)方法,该方法使用应用程序提供的事件处理程序来处理XML。 在JSR-173:XML的流API(StAX)中提出了这些方法的流替代方法。 它的最终版本于2004年3月发布,并成为JAXP 1.4的一部分(将包含在即将发布的Java 6版本中)。

顾名思义,StAX注重流媒体 。 实际上,StAX与其他方法的不同之处在于应用程序将XML作为事件流进行处理的能力。 将XML作为一组事件进行处理的想法并不是全新的(实际上,它已经存在于SAX中)。 但是,不同之处在于StAX允许应用程序代码一个接一个地拉出这些事件,而不必提供在解析器方便时从解析器接收事件的处理程序。

StAX实际上由两组XML处理API组成,每组提供不同的抽象级别。 基于游标的API允许应用程序将XML作为令牌(或事件)流使用。 应用程序可以检查解析器的状态并获取有关最后解析的令牌的信息,然后前进到下一个令牌,依此类推。 这是一个相当底层的API。 尽管效率很高,但它没有提供底层XML结构的抽象。 基于高级迭代器的API允许应用程序将XML作为一系列事件对象进行处理,每个事件对象都将XML结构的一部分传达给应用程序。 应用程序所需要做的就是确定已解析事件的类型,将其转换为相应的具体类型,并使用其方法来获取与该事件有关的信息。

基础

为了使用这两个API,应用程序必须首先获得一个具体的XMLInputFactory 。 在经典的JAXP风格中,这是使用Abstract Factory模式完成的。 XMLInputFactory类提供静态的newInstance方法,这些方法用于定位和实例化具体工厂。 要配置此实例,可以设置自定义或预定义的属性(其名称在类XMLInputFactory中定义)。 最后,为了使用基于游标的API,应用程序通过调用createXMLStreamReader方法之一来获取XMLStreamReader 。 另外,为了使用基于事件迭代器的API,应用程序将调用createXMLEventReader方法之一来获取XMLEventReader (请参见清单1)。

清单1.获取和配置默认的XMLInputFactory
// get the default factory instance
XMLInputFactory factory = XMLInputFactory.newInstance();
// configure it to create readers that coalesce adjacent character sections
factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
XMLStreamReader r = factory.createXMLStreamReader(input);
// ...

XMLStreamReaderXMLEventReader允许应用程序自行遍历基础XML流。 两种方法之间的区别在于它们如何显示已解析的XML InfoSet的片段。 XMLStreamReader充当游标,其指向刚超出最近解析的XML令牌之外的位置,并提供获取有关此令牌的更多信息的方法。 这种方法非常节省内存,因为它不会创建任何新对象。 但是,业务应用程序开发人员可能会发现XMLEventReader稍微更直观,因为它实际上是将XML转换为事件对象流的标准Java迭代器。 每个事件对象依次封装与其表示的特定XML结构有关的信息。 本系列的第2部分将详细介绍基于事件迭代器的API。

至于使用哪种API样式取决于情况。 与基于游标的API相比,基于事件迭代器的API代表了一种更加面向对象的方法。 这样,由于当前解析器的状态反映在事件对象中,因此更容易应用于模块化体系结构。 因此,应用程序组件在处理事件时不需要访问解析器/读取器。 此外,可以使用XMLInputFactorycreateXMLEventReader(XMLStreamReader)方法从XMLStreamReader创建XMLEventReader

StAX还定义了序列化API,这是Java的标准XML处理支持中非常缺少的功能。 与其解析对象一样,它也是一种流API,有两种形式:用于令牌的较低级XMLStreamWriter和用于事件对象的较高级XMLEventWriterXMLStreamWriter提供了用于编写单个XML令牌(例如,打开和关闭标签或元素属性)的方法,而无需检查其格式是否正确。 另一方面, XMLEventWriter允许应用程序将完整的XML事件对象添加到输出中。 在第3部分中,您将详细探讨StAX序列化API。

为什么要使用StAX?

在致力于学习新的XML处理API之前,您可能想知道是否值得这样做。 实际上,StAX采用的基于拉的方法相对于其他方法具有几个重要的优点。 首先,无论使用哪种API样式,都是由应用程序调用读取器(解析器),而不是相反。 通过保留

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值