# Oracle 的流式 XML 分析器实现

> 原文： [https://docs.oracle.com/javase/tutorial/jaxp/stax/parser.html](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.jar` 和 `javaee.jar` 文件中实现，两者都位于 _install_dir_ `/ lib 中/` 目录。

包含在 JAXP 参考实现中的是 StAX 代码示例，位于 _INSTALL_DIR_ `/ jaxp-` _ 版本 _ `/ samples / stax` 目录中，说明了 Sun 的 Streaming XML Parser 实现是如何工作的。这些例子在[示例代码](example.html)中描述。

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

*   [举报 CDATA 活动](#bnbfj)

*   [Streaming XML Parser Factories Implementation](#bnbfk)

这些主题将在下面讨论。

## 报告 CDATA 事件

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

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

```

## 流式 XML 分析器工厂实现

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

但是，可能存在应用程序想要了解工厂实现类名称并显式设置属性的情况。这些场景可能包括类路径中有多个 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

```