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.jar
和javaee.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
属性:
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