差异SAXParserFactory XMLReaderFactory。 哪一个选择?

它们似乎都有相同的目的(创建一个XMLReader)。 一些教程包含一个,另一个包含。

的SAXParserFactory:

  • http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParserFactory.html
  • 似乎更可配置
  • 更多的锅炉板代码
  • 官方支持api

示例代码:

// SAXParserFactory SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader(); reader.parse(new InputSource("document.xml")); 

XMLReaderFactory:

  • http://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/XMLReaderFactory.html
  • 两行代码少
  • 不太可配置
  • 社区支持,没有保证

示例代码:

 // XMLReaderFactory XMLReader xmlReader = XMLReaderFactory.createXMLReader(); xmlReader.parse(new InputSource("document.xml")); 

题:

这些是主要的差异还是有一些我已经监督过。

你应该选择哪一个?

主要的JAXP APIsjavax.xml.parsers包中定义。 该软件包包含供应商中立的工厂类,如SAXParserFactory ,它为您提供S AXParser

SAXParserFactory定义了一个工厂API,使应用程序能够配置和获取基于SAX的解析器来解析XML文档。

  • SAXParser定义了包装XMLReader实现类的API。

  • org.xml.sax定义了基本的SAX API。

  • Java Runtime附带一个默认实现XMLReader

SAXParserFactory隐藏了您的详细信息(SAX1)ParserFactory /(SAX2)XMLReaderFactory …….

如果您希望能够使用不同的JAXP Parser替换默认的JAXP Parser(默认实现中可能存在已知的incomapatity / bug),则应使用供应商中性SAXParserFactory

如果您知道应用程序将始终使用SAX2 XMLReader ,则可以使用XMLReaderFactory

曾写过一本关于Java处理XML处理的书的Elliotte Rusty Harold曾写道:

 SAXParserFactory [is] a hideous, evil monstrosity of a class that should be hung, shot, beheaded, drawn and quartered, burned at the stake, buried in unconsecrated ground, dug up, cremated, and the ashes tossed in the Tiber while the complete cast of Wicked sings "Ding dong, the witch is dead." --Elliotte Rusty Harold on xml-dev 

我实际上不会走得那么远(如果我这样做,我会试着让它语法化)。 像许多JAXP一样,它不是最精彩的设计; 但我确实使用它作为获取解析器实例的默认方式,只是因为它与JAXP的其他部分一致。

从历史上看,这两者是并行开发的。 JAXP最初尝试向SAX1添加缺少的function,但同时,SAX2正在出现并填补了一些空白,因此这个特殊的差距被填补了两次。