【问题标题】:Difference SAXParserFactory XMLReaderFactory. Which one to choose?区别 SAXParserFactory XMLReaderFactory。选择哪一个?
【发布时间】:2012-05-21 22:47:21
【问题描述】:

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

SAXParserFactory:

示例代码:

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

XMLReaderFactory:

示例代码:

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

问题:

这些是主要区别还是我监督过的一些区别。

你应该选择哪一个?

【问题讨论】:

  • SAXParserFactory 是 JAXP,而 XMLReaderFactory 是“官方”SAX API。我记得 O'Reilly 的旧 SAX2 书推荐了官方 API,因为它处理名称空间的方式。我不知道这是否相关了。但是,我想我会使用 XMLReaderFactory,除非我出于某种原因需要 JAXP。也许其他人可以提供更多当前的输入。

标签: java xml sax jaxp


【解决方案1】:

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

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 添加缺失的功能,但与此同时,SAX2 出现并填补了一些空白,因此这个特殊的空白被填补了两次。

【讨论】:

    【解决方案2】:

    主要的JAXP APIsjavax.xml.parsers 包中定义。该包包含供应商中立的工厂类,如SAXParserFactory,它给你一个SAXParser

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

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

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

    • Java 运行时附带一个默认实现XMLReader

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

    如果您希望能够用不同的JAXP Parser 替换默认的JAXP Parser(默认实现中可能存在已知的不兼容/错误)实现,您应该使用供应商中立的SAXParserFactory

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

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2023-03-10
      • 1970-01-01
      • 2017-04-27
      • 2019-10-20
      相关资源
      最近更新 更多