昨天我已经阅读了与SAX2 API类XMLReaderFactory和JAXP API的SAXParserFactory相关的文档。它们都用于提供XMLReader类实例的相同目的。然后我浏览了各种材料,以了解两者之间的差异,并在特定情况下更有用。
我读过的关于上述问题的大多数材料都说明了以下差异。
辅助类XMLReaderFactory方法的问题 createXMLReaderFactory(String className)是工厂要求的, 作为参数,要使用的解析器类的String名称( Apache类,org.apache.xerces.parsers.SAXParser,再次)。您可以 通过将不同的解析器类作为String传递来更改解析器。 使用此方法,如果更改解析器名称,则不需要 更改任何import语句,但您仍需要重新编译 类。这显然不是最好的解决方案。这会很多 更容易在不重新编译类的情况下更改解析器。
JAXP提供了更好的替代方案:它允许您提供解析器作为 Java系统属性。当然,从下载分发版时 Sun,您将获得使用Sun的Xerces版本的JAXP实现。 更改解析器 - 比如说,改为Oracle的解析器 - 需要你 更改类路径设置,从一个解析器实现移动到 另一个,但它不需要代码重新编译。这就是 魔术 - 抽象 - JAXP的全部意义。任何人都可以告诉 我在特定方案中使用特定方法的情况 变得更有用
但我不同意上述差异,因为如果我们使用方法createXMLReaderFactory(String className)而不是直接将类名传递给方法,如果我们从属性文件中读取类的名称,将它传递给方法然后我们不需要重新编译该类。
如果我在上述方面是正确的,请告诉我。
有人能告诉我SAX2 API类XMLReaderFactory和JAXP API的SAXParserFactory之间的区别吗?
答案 0 :(得分:0)
我想说JAXP的SAXParserFactory
和SAXParser
只是SAX API的XMLReaderFactory
和XMLReader
的便利外观。 SAXParser
在内部使用XMLReader
进行实际解析。您可以使用XMLReader.parse(InputSource)
解析没有SAXParser的XML,但使用SAXParser.parse(InputSource, DefaultHandler).