Java 差异SAXParserFactory XMLReaderFactory。选择哪一个?
两者似乎有相同的目的(创建一个XMLReader)。 有些教程包含一个,有些包含另一个 SAXParserFactory:Java 差异SAXParserFactory XMLReaderFactory。选择哪一个?,java,xml,sax,jaxp,Java,Xml,Sax,Jaxp,两者似乎有相同的目的(创建一个XMLReader)。 有些教程包含一个,有些包含另一个 SAXParserFactory: 似乎更易于配置 更多锅炉板代码 官方支持的api 示例代码: // SAXParserFactory SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXML
- 似乎更易于配置
- 更多锅炉板代码
- 官方支持的api
// SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.parse(new InputSource("document.xml"));
// XMLReaderFactory
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.parse(new InputSource("document.xml"));
XMLReaderFactory:
- 少两行代码
- 不太可配置
- comunity得到了支持,而且毫无戒心
// SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.parse(new InputSource("document.xml"));
// XMLReaderFactory
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.parse(new InputSource("document.xml"));
问题:
这些是主要的区别,还是有一些是我监督过的
您应该选择哪一个?主要的
JAXP API
在javax.xml.parsers
包中定义。该包包含与供应商无关的工厂类,如SAXParserFactory
,它为您提供了一个SAXParser
SAXParserFactory定义了一个工厂API,使应用程序能够配置和获取基于SAX的解析器来解析XML文档
- SAXParser定义了封装XMLReader的API 实现类
- 包
定义了基本的SAXAPIorg.xml.sax
- Java运行时附带了一个默认实现
XMLReader
SAXParserFactory
隐藏了(SAX1)ParserFactory/(SAX2)XMLReaderFactory。。。从你这里
如果您希望能够用不同的JAXP
解析器(默认实现中可能存在已知的incomapatibility/bug)实现来替换默认的JAXP
解析器,您应该使用供应商中立的SAXParserFactory
如果您知道应用程序将始终使用
SAX2
XMLReader
,则可以使用XMLReaderFactory
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出现并填补了一些空白,因此这个特殊的空白被填补了两次。SAXParserFactory是JAXP,而XMLReaderFactory是“官方”SAXAPI。我记得O'Reilly的老SAX2书推荐了官方API,因为它处理名称空间的方式。我不知道这是否还相关。但是,我想我会使用XMLReaderFactory,除非出于某种原因需要JAXP。也许其他人可以提供更多的电流输入。