文档

Java™ 教程
隐藏目录
Oracle 的流式 XML 解析器实现
路径: Java XML处理API(JAXP)
课程: XML的流API

Oracle的流式XML解析器实现

应用程序服务器9.1包含Sun Microsystems的JSR 173(StAX)实现,称为Sun Java流式XML解析器(简称为流式XML解析器)。流式XML解析器是一个基于Xerces2代码库构建的高速、非验证、W3C XML 1.0和Namespace 1.0兼容的流式XML拉取解析器。

在Sun的流式XML解析器实现中,Xerces2的底层,特别是Scanner和相关类,已经被重新设计为按拉取方式运行。除了底层的变化之外,流式XML解析器还包括额外的与StAX相关的功能和许多性能增强的改进。流式XML解析器实现在appserv-ws.jarjavaee.jar文件中,这两个文件位于install_dir/lib/目录中。

JAXP参考实现中附带了StAX代码示例,位于INSTALL_DIR/jaxp-version/samples/stax目录中,展示了Sun的流式XML解析器实现的工作原理。这些示例在示例代码中有描述。

在继续使用示例代码之前,有两个流式XML解析器的方面需要您注意:

下面将讨论这些主题。

报告CDATA事件

流式XML解析器中实现的javax.xml.stream.XMLStreamReader不会报告CDATA事件。如果您的应用程序需要接收这些事件,请配置XMLInputFactory以设置以下特定于实现的report-cdata-event属性:

XMLInputFactory factory = XMLInptuFactory.newInstance();
factory.setProperty("report-cdata-event", Boolean.TRUE);

流式XML解析器工厂实现

大多数应用程序不需要知道工厂实现类名。对于大多数应用程序来说,只需将javaee.jarappserv-ws.jar文件添加到类路径中即可,因为这两个JAR文件在META-INF/services目录下提供了各种流式XML解析器属性的工厂实现类名,例如javax.xml.stream.XMLInputFactoryjavax.xml.stream.XMLOutputFactoryjavax.xml.stream.XMLEventFactory,这是应用程序在请求工厂实例时执行的查找操作的第三个步骤。有关查找机制的更多信息,请参阅XMLInputFactory.newInstance方法的Javadoc。

然而,可能存在一些场景,应用程序希望知道工厂实现类的名称并显式设置属性。这些场景可能包括在类路径中存在多个JSR 173实现的情况下,应用程序想要选择一个,可能是性能更好的一个,包含了关键的错误修复等。

如果应用程序设置了SystemProperty,它是查找操作的第一步,因此获取工厂实例将比其他选项快;例如:

javax.xml.stream.XMLInputFactory -->
  com.sun.xml.stream.ZephyrParserFactory

javax.xml.stream.XMLOutputFactory -->
  com.sun.xml.stream.ZephyrWriterFactor

javax.xml.stream.XMLEventFactory -->
  com.sun.xml.stream.events.ZephyrEventFactory

上一页: 使用StAX
下一页: 示例代码