2012-12-14 21 views
6

下面两个片段之间有什么区别,如果我只是需要解析XML?SAXParser和XMLReader之间的区别

1.By使用的SAXParser parse方法:

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

现在使用的XMLReader的从SAXParser的

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

尽管获得了更大的灵活性的收购parse方法,还有没有其他的区别吗?

回答

8

parse方法SAXParser只是委托给一个内部实例XMLReader,通常更方便。对于一些更高级的使用案例,您必须使用XMLReader。有些例子是

  • 设置执行非标准功能
  • 设置不同类别的ContentHandlerEntityResolverErrorHandler
  • 交换处理,同时分析
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解析器。那里有几个。所以这取决于你想要的东西。

+0

很抱歉,但我知道DOM解析器。我只是想知道为什么SAXParser和XMLReader都提供'parse'方法。有什么技术原因吗? – sakura

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。