当前位置 : 主页 > 网页制作 > xml >

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

来源:互联网 收集:自由互联 发布时间:2021-06-13
例如,考虑以下xml root childNode attribute1="value1" grandChildNode attrib1="val1" attrib2="val2"some content1 /grandChildNode grandChildNode attrib1="val1" attrib2="val2"some content2 /grandChildNode grandChildNode attrib1="val1" attr
例如,考虑以下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秒将成为一个问题.

网友评论