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\.jar
和javaee\.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\.jar
和appserv\-ws\.jar
文件添加到 Classpath 中就足够了,因为这两个 jar 为META\-INF/services
目录下的各种 Streaming XML Parser 属性(例如javax\.xml\.stream\.XMLInputFactory
,javax\.xml\.stream\.XMLOutputFactory
和javax\.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