2012-12-14 51 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。