首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么sax解析比dom解析快?斯塔克斯是怎么工作的?

为什么sax解析比dom解析快?斯塔克斯是怎么工作的?
EN

Stack Overflow用户
提问于 2010-09-29 19:38:57
回答 4查看 17.6K关注 0票数 11

与:来自java的libxml2有关

是的,这个问题很长-很抱歉。我尽可能地保持着浓密。在阅读整篇文章之前,我用粗体回答了这些问题,以便更容易地看一眼。

为什么sax解析要比dom解析快?我唯一能想到的是,您可能忽略了大多数传入数据,因此不会浪费时间来处理您不关心的部分xml。IOW -解析w/ SAX后,无法重新创建原始输入。如果您编写了SAX解析器,以便将每个节点都计算在内(因此可以重新创建原始节点),那么它将不会比DOM更快吗?

我之所以问这个问题,是因为我试图更快地解析xml文档。解析后,我需要访问整个xml树。我正在为第三方服务编写一个要插入的平台,所以我无法预测xml文档的哪些部分是需要的,哪些部分不需要,我甚至不知道传入文档的结构。这就是为什么我不能使用jaxb或sax。内存占用对我来说不是一个问题,因为xml文档很小,每次只需要一个内存。解析这个相对较小的xml文档所花费的时间让我心灰意冷。我以前没有使用过stax,但也许我需要进一步研究,因为它可能是中间地带?如果我正确理解,stax保留原始的结构,并按需要处理所需的部分?,这样的话,最初的解析时间可能会很快,但是每次我要求它遍历它尚未遍历的部分树时,就会发生这种情况吗?

如果你提供的链接回答了大部分问题,我会接受你的回答(如果你已经在其他地方回答了我的问题,你就不用直接回答)。

更新:我用sax重写了它,它在avg2.1ms上解析文档。这是一个提高(16% )比多姆采取的2.5ms,但这不是我(等人)会猜到的的幅度。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-29 20:03:03

假设您只解析文档,则不同解析器标准的排序如下:

1. StAX是最快的

  • 这件事是向你报告的。

2. SAX是下一个

  • 它完成StAX所做的一切,加上内容是自动实现的(元素名称、命名空间、属性、.)

3. DOM是最后一个

  • 它执行SAX所做的一切,并将信息作为Node的一个实例来表示。

您的用例

  • 如果需要维护所有的XML,则DOM是标准的表示形式。它干净地集成了XSLT (javax.xml.transform)、XPath (javax.xml.xpath)和模式验证(javax.xml.validation) API。但是,如果性能是关键,那么您可以使用StAX比DOM解析器构建DOM更快地构建自己的树结构。
票数 15
EN

Stack Overflow用户

发布于 2010-09-29 19:42:02

DOM解析要求您将整个文档加载到内存中,然后遍历一棵树来查找所需的信息。

SAX只需要执行基本IO所需的内存,并且可以在读取文档时提取所需的信息。因为SAX是面向流的,所以您甚至可以处理仍然由另一个进程编写的文件。

票数 13
EN

Stack Overflow用户

发布于 2010-09-29 19:42:47

SAX更快,因为DOM解析器通常使用SAX解析器在内部解析文档,然后执行创建和操作对象以表示每个节点的额外工作,即使应用程序不关心它们。

直接使用SAX的应用程序可能比DOM“解析器”更有效地利用信息集。

StAX是一个很好的媒介,应用程序可以获得比SAX事件驱动的方法更方便的API,但它不会因为创建完整的DOM而效率低下。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3825206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档