加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:01:49 所属栏目:百科 来源:网络整理
导读:例如,考虑以下xml root childNode attribute1="value1" grandChildNode attrib1="val1" attrib2="val2"some content1 /grandChildNode grandChildNode attrib1="val1" attrib2="val2"some content2 /grandChildNode grandChildNode attrib1="val1" attrib2="
例如,考虑以下xml

<root>
  <childNode attribute1="value1">
     <grandChildNode attrib1="val1" attrib2="val2">some content1
     </grandChildNode>
     <grandChildNode attrib1="val1" attrib2="val2">some content2
     </grandChildNode>
     <grandChildNode attrib1="val1" attrib2="val2">some content3
     </grandChildNode>
  </childNode>
  <childNode attribute1="value1">
     <grandChildNode attrib1="val1" attrib2="val2">some content1
     </grandChildNode>
     <grandChildNode attrib1="val1" attrib2="val2">some content2
     </grandChildNode>
     <grandChildNode attrib1="val1" attrib2="val2">some content3
     </grandChildNode>
  </childNode>
  <childNode attribute1="value1">
     <grandChildNode attrib1="val1" attrib2="val2">some content1
     </grandChildNode>
     <grandChildNode attrib1="val1" attrib2="val2">some content2
     </grandChildNode>
     <grandChildNode attrib1="val1" attrib2="val2">some content3
     </grandChildNode>
  </childNode>
</root>

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

解决方法

如果要完整地处理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秒将成为一个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读