0

昨天我阅读了与 JAXP API 的 SAX2 API 类 XMLReaderFactory 和 SAXParserFactory 相关的文档。它们都用于提供 XMLReader 类的实例的相同目的。然后我浏览了各种材料以了解两者之间的区别以及在特定情况下哪个更有用。

我读过的关于上述问题的大多数材料都说明了以下差异。

辅助类 XMLReaderFactory 方法 createXMLReaderFactory(String className) 的问题在于,工厂需要使用解析器类的字符串名称作为参数(同样是 Apache 类,org.apache.xerces.parsers.SAXParser)。您可以通过将不同的解析器类作为字符串传递来更改解析器。使用这种方法,如果您更改解析器名称,则无需更改任何导入语句,但仍需要重新编译该类。这显然不是最好的解决方案。在不重新编译类的情况下更改解析器会容易得多。

JAXP 提供了更好的选择:它允许您提供解析器作为 Java 系统属性。当然,当您从 Sun 下载一个发行版时,您会得到一个使用 Sun 的 Xerces 版本的 JAXP 实现。将解析器更改为 Oracle 的解析器需要您更改类路径设置,从一个解析器实现移动到另一个,但它不需要重新编译代码。这就是 JAXP 的魔力——抽象。谁能告诉我在哪种特定情况下使用特定方法会变得更有用

但我不同意上述区别,因为如果我们使用方法 createXMLReaderFactory(String className) 而不是直接将类名传递给方法,如果我们从属性文件中读取类名并将其传递给那么我们不需要重新编译该方法。

请让我知道我在上述观点上是否正确。

谁能告诉我 SAX2 API 类 XMLReaderFactory 和 JAXP API 的 SAXParserFactory 之间的区别?

4

1 回答 1

0

我会说 JAXPSAXParserFactorySAXParser只是 SAX APIXMLReaderFactoryXMLReader. SAXParser在内部用于XMLReader实际解析。您可以在没有 SAXParser 的情况下解析 XML,XMLReader.parse(InputSource)但使用它更方便SAXParser.parse(InputSource, DefaultHandler).

于 2013-01-03T07:48:56.360 回答