SAXParserfactory和XMLReaderFactory之间的区别

时间:2013-01-03 06:55:24

标签: java xml sax jaxp

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

1 个答案:

答案 0 :(得分:0)

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

更方便