SAXParser和XMLReader之间的区别

时间:2012-12-14 12:46:41

标签: java xml-parsing saxparser

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

1.使用SAXParser parse方法:

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

  • 设置实施的非标准功能
  • 将不同的班级设为XMLReaderContentHandlerEntityResolver
  • 解析时切换处理程序

答案 1 :(得分: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。

答案 2 :(得分: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解析器。那里有几个。所以它真的取决于你想要的东西。