Oracle 的流 XML 解析器实现

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

在 Sun 的 Streaming XML Parser 实现中,Xerces2 的下层(尤其是 Scanner 和相关类)已被重新设计为以拉动方式运行。除了底层的更改之外,Streaming XML Parser 还包括与 StAX 相关的其他功能以及许多性能增强的改进。流 XML 解析器在appserv\-ws\.jarjavaee\.jar文件中实现,这两个文件都位于 install_dir /lib/目录中。

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

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

这些主题将在下面讨论。

报告 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文件添加到 Classpath 中就足够了,因为这两个 jar 为META\-INF/services目录下的各种 Streaming XML Parser 属性(例如javax\.xml\.stream\.XMLInputFactoryjavax\.xml\.stream\.XMLOutputFactoryjavax\.xml\.stream\.XMLEventFactory)提供了工厂实现的类名,这是第三步应用程序请求工厂实例时的查找操作。有关XMLInputFactory\.newInstance方法的更多信息,请参见 Javadoc。

但是,在某些情况下,应用程序想知道工厂实现类名称并显式设置属性。这些场景可能包括以下情况:在 Classpath 中有多个 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