首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

sax与Dom差别

2012-10-30 
sax与Dom区别SAX与DOM的比较每一个进行XML开发的编程人员都知道DOM,那为什么在有了DOM这个功能强大的文档

sax与Dom区别
SAX与DOM的比较

每一个进行XML开发的编程人员都知道DOM,那为什么在有了DOM这个功能强大的文档对象模型之后,我们还需要SAX?这就要从它们根本不同的实现方法上来分析。DOM解析器是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,而后对文档的操作都是在这个树状模型上完成的。这个在内存中的文档树将是文档实际大小的几倍。这样做的好处是结构清除、操作方便,而带来的麻烦就是极其耗费系统资源。而SAX正好克服了DOM的缺点。SAX解析器的处理过程是通读整个文档,根据文档内容产生事件,而把对这些事件的处理交由事件处理器处理。SAX不需要在内存中保存整个文档,它对系统资源的节省是显而易见的。这样在一些需要处理大型XML文档和性能要求比较高的场合就要用SAX了。

下面的表格列出了SAX和DOM在一些方面的对照:
package test.corejava.xml;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLFilter;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;import org.xml.sax.helpers.XMLReaderFactory;public class MySAXApp {public static void main(String[] args) throws ParserConfigurationException {try {// 初始化readerXMLReader reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");// 初始化过滤器XMLFilter myFilter = new MyFilter(reader);// 创建DefaultHandler的实例//DefaultHandler defaultHandler = new MyDefaultHandler();XMLFilter myFilter2 = new MyFilter2(myFilter);// 为过滤后的事件流设置ContentHandlermyFilter2.setContentHandler(new DefaultHandler());// 为过滤后的事件流设置ErrorHandlermyFilter2.setErrorHandler(new DefaultHandler());// 开始解析文档myFilter2.parse(new InputSource(MySAXApp.class.getResourceAsStream("book.xml")));} catch (IOException e) {System.out.println("读入文档时错: " + e.getMessage());} catch (SAXException e) {System.out.println("解析文档时错: " + e.getMessage());}}}
可以利用Filter去取自己想要的元素!

原文出处:http://www.ibm.com/developerworks/cn/xml/x-saxhandle/
另外几个不错的Jaxp的基础知识介绍:
http://www.ibm.com/developerworks/cn/xml/x-jaxp/
http://www.ibm.com/developerworks/cn/xml/x-jaxp2/
http://www.w3school.com.cn/xpath/xpath_syntax.asp
http://hi.baidu.com/peiwenlin/blog/item/ac6baa509adaa16e8535241c.html
http://www.xml.com/pub/a/2005/07/06/jaxp.html

热点排行