Oracle 的流式 XML 分析器实现

原文: https://docs.oracle.com/javase/tutorial/jaxp/stax/parser.html

Application Server 9.1 包括 Sun Microsystems 的 JSR 173(StAX)实现,称为 Sun Java Streaming XML Parser(称为 Streaming XML Parser)。 Streaming XML Parser 是一个基于 Xerces2 代码库的高速,无验证,符合 W3C XML 1.0 和 Namespace 1.0 标准的流式 XML 拉解析器。

在 Sun 的 Streaming XML Parser 实现中,Xerces2 较低层,特别是 Scanner 和相关类,已经过重新设计,以拉动方式运行。除了较低层的更改之外,Streaming XML Parser 还包括其他与 StAX 相关的功能以及许多性能增强功能。 Streaming XML Parser 在appserv-ws.jarjavaee.jar文件中实现,两者都位于 install_dir / lib 中/目录。

包含在 JAXP 参考实现中的是 StAX 代码示例,位于 INSTALL_DIR / jaxp- 版本 / samples / stax目录中,说明了 Sun 的 Streaming XML Parser 实现是如何工作的。这些例子在示例代码中描述。

在继续执行示例代码之前,您应该了解 Streaming XML Parser 的两个方面:

这些主题将在下面讨论。

报告 CDATA 事件

在 Streaming XML Parser 中实现的javax.xml.stream.XMLStreamReader不报告 CDATA 事件。如果您的应用程序需要接收此类事件,请配置XMLInputFactory以设置以下特定于实现的report-cdata-event属性:

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

流式 XML 分析器工厂实现

大多数应用程序不需要知道工厂实现类名。只需将javaee.jarappserv-ws.jar文件添加到类路径就足以满足大多数应用程序的要求,因为这两个 jar 为各种 Streaming XML Parser 属性提供了工厂实现类名。 META-INF / services目录 - 例如, javax.xml.stream.XMLInputFactoryjavax.xml.stream.XMLOutputFactoryjavax。 xml.stream.XMLEventFactory - 这是应用程序请求工厂实例时查找操作的第三步。有关查找机制的更多信息,请参阅 Javadoc 以获取XMLInputFactory.newInstance方法。

但是,可能存在应用程序想要了解工厂实现类名称并显式设置属性的情况。这些场景可能包括类路径中有多个 JSR 173 实现并且应用程序想要选择一个,也许一个具有卓越性能,包含关键错误修复等的情况。

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

  1. javax.xml.stream.XMLInputFactory -->
  2. com.sun.xml.stream.ZephyrParserFactory
  3. javax.xml.stream.XMLOutputFactory -->
  4. com.sun.xml.stream.ZephyrWriterFactor
  5. javax.xml.stream.XMLEventFactory -->
  6. com.sun.xml.stream.events.ZephyrEventFactory