7

如果我只需要解析 XML,下面两个片段有什么区别?

1.通过使用 SAXParserparse方法:

SAXParserFactory sfactory = SAXParserFactory.newInstance();
SAXParser parser = sfactory.newSAXParser();
parser.parse(new File(filename), new DocHandler());

parse现在使用从 SAXParser 获取的XMLReader方法

SAXParserFactory sfactory = SAXParserFactory.newInstance();
SAXParser parser = sfactory.newSAXParser();
XMLReader xmlparser = parser.getXMLReader();
xmlparser.setContentHandler(new DocHandler());
xmlparser.parse(new InputSource("test1.xml"));   

尽管获得了更大的灵活性,但还有其他区别吗?

4

3 回答 3

9

仅委托给内部 instanceof的parse方法通常更方便。对于一些更高级的用例,您必须使用. 一些例子是SAXParserXMLReaderXMLReader

  • 设置实现的非标准特性
  • 将不同的类设置为ContentHandler,EntityResolverErrorHandler
  • 解析时切换处理程序
于 2012-12-14T13:46:20.520 回答
3

正如您所注意到的,XMLReader 属于 org.xml.sax(来自http://www.saxproject.org/),而 SAXParser 属于 javax.xml.parsers。SAXParser 在内部使用 XMLReader。您可以直接使用 XMLReader

XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setContentHandler(handler);
xr.setDTDHandler(handler);
...

但是您会注意到 SAXParser 使用起来更方便。也就是说,为方便起见,添加了 SAXParser。

于 2012-12-14T13:36:50.693 回答
0

http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/XMLReader.html。查看 XML 阅读器的链接并查看 sax 解析器的以下链接。http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html

使用不同的解析器取决于您希望解析器做什么。如果您修改、删除 xml 中的内容,您可以使用 W3C Dom 解析器。如果您只想解析和获取元素,您可以使用 SAX 解析器。那里有几个。所以这真的取决于你想要什么。

于 2012-12-14T12:51:46.550 回答