【问题标题】:Difference between the SAXParserfactory and XMLReaderFactorySAXParserfactory 和 XMLReaderFactory 之间的区别
【发布时间】:2012-12-17 13:06:18
【问题描述】:

昨天我阅读了与 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 之间的区别?

【问题讨论】:

标签: java xml sax jaxp


【解决方案1】:

我会说 JAXP 的 SAXParserFactorySAXParser 只是 SAX API 的 XMLReaderFactoryXMLReader 的便利外观。 SAXParser 在内部使用 XMLReader 进行实际解析。您可以使用 XMLReader.parse(InputSource) 在不使用 SAXParser 的情况下解析 XML,但使用 SAXParser.parse(InputSource, DefaultHandler). 会更方便

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    • 2011-02-18
    相关资源
    最近更新 更多