XML库的解析效率

XML库的解析效率主要包括解析、存储、导出、遍历、修改、XPath定位 等等。

XML的访问模型主要有三种,DOM SAX,PULL

DOMDocument Object Model,是最常用的XML解析库。DOM 适用的范围是频繁的不定向随机性访问,以及进行 xslt 之类的转换。 例如如果你需要用xpath 查询或者你要遍历, DOM.还是不错的 只读不只读基本上对规模/性能没什么太大影响. BTW XSLT的功能还是相当强大的。

如果格式基本上固定的单向读取,即不用遍历, 或者一次性遍历, SAX 就是了.

如果格式比较灵活且对效率要求高 pull 模型适用, XmlLite是基于 pull 模型的。在第四期的MSDN magazine上有关于XML lite的讨论。

因为 sax 是由 reader 将所有内容推给你,pull 则是在需要的时候将信息从 reader 拉回来,如果一个节点忽略不处理时,sax 引擎后台还是解析pull 则只需要做最简单的 tag 匹配就可跳过。

DOM在进行解析时基本上也是用 sax 实现,但因为其要维护完整的可随机访问、修改的树

在内存消耗和解析上的成本往往大大超过预期。跟 sax/pull 模型来说,加载xml树的时间,

以及占用内存的大小,基本上都是一个数量级以上差别。

从本质上来说,xml 实际上有两种使用策略,基于文档的和基于数据流的前者类似于xhtmlOpenDocument这样,结构复杂且相互嵌套甚至引用,后者类似RSSXMPP相对来说格式固定,使用时只需要进行一次解析,当然还有很多将两种策略混用或介于两者之间的,需要独立分析需求。因此如何选择解析模型,实际上依赖于你是期望如何定义数据模型,而实际上就算解析模型,也不完全是这三种,有很多满足特定需求的实现。例如以前见过一个基于pull策略的dom模型,快速建立,随用随取,还有基于token的,一个64bit标记快速定位来读取和修改,为硬件实现优化等等诸如此类的思路。

 
posted @ 2007-04-27 00:14  来自海边的一片云  阅读(833)  评论(0编辑  收藏  举报