当前位置:  开发笔记 > Android > 正文

与在Dom4J中使用DOM相比,XPath的效率如何?

如何解决《与在Dom4J中使用DOM相比,XPath的效率如何?》经验,为你挑选了1个好方法。

例如,考虑以下xml


  
     some content1
     
     some content2
     
     some content3
     
  
  
     some content1
     
     some content2
     
     some content3
     
  
  
     some content1
     
     some content2
     
     some content3
     
  

使用DOM来获取根节点,然后循环通过childNode和grandChildNode是高效的还是使用XPath表达式来收集子节点和grandChild节点的细节是否有效?



1> Jon Cram..:

如果要完整地处理XML文档,将XML解析为DOM几乎总是在反序列化时间,CPU使用率和内存使用方面效率最低.

解析到DOM需要大约10-15倍的内存量,因为XML文档需要磁盘空间.例如,1兆字节的XML文档将解析为占用10-15兆字节内存的DOM.

如果您打算修改部分或全部数据,然后将结果放回XML文档,则只能解析为DOM.对于所有其他用例,DOM是一个糟糕的选择.

XPath通常显着减少了资源,但这取决于文档的长度(即您拥有多少'childNode'元素)以及您感兴趣的数据文档中的位置.

XPath内存使用和完成时间往往会使文档越走越远.例如,假设您有一个包含20,000个childNode元素的XML文档,每个childNode都有一个您事先知道的唯一标识符,并且您希望从文档中提取已知的childNode.提取第18,345个childNode会比提取第3个节点使用更多,更多,更多的内存.

因此,如果您使用XPath提取所有childNode元素,您可能会发现它比解析为DOM效率低.XPath通常是提取XML doucment的一部分的简单方法.我不建议使用它来处理所有XML文档.

到目前为止,如果您确实希望提取和处理XML文档中的所有数据,那么最好的方法是使用基于SAX的阅读器.与其他任何方法相比,这将比数量级更快,资源更少.

也就是说,它还取决于您正在处理的数据量.对于您提供的示例XML文档,您将不会注意到任何实际差异.是的,DOM将"缓慢",SAX将"快速",但我们正在谈论毫秒或微秒的差异.

SAX可以比DOM快几百或几千倍,但如果这是2微秒和2毫秒之间的差异,你就不会注意到.当您处理包含20,000个childNode元素的文档时,2秒与200秒将成为一个问题.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有