我需要建议在Delphi中使用什么(我使用Delphi 2009)来尽可能快地处理非常大的XML文件(例如100 MB).
我需要输入XML,从我的程序中访问和更新其中的数据,然后再次导出修改后的XML.
希望输入和输出可以在快速的Windows机器上在几秒钟内完成.
澄清.我希望我需要使用DOM,因为访问数据结构以开发报告和更新数据非常重要,我需要这个功能非常快.
输入仅对文件加载执行一次,输出仅对文件保存完成,通常在退出时只执行一次.这些也应该很快,但不如内存中数据访问和更新那么重要.
我的理解是第三方解析器只能帮助输入和输出,而不是一旦加载到内存中就使用和修改数据.或者我错了?
如果我正确理解了您的问题,您就知道数据结构并且您正在修改数据 - 而不是文件的XML结构.
在这些条件下,如果性能至关重要,那么您可以尝试使用直接文本操作 - 跳过XML解析.
从流中读取,使用一些快速文本搜索算法,例如Boyer-Moore,找到需要修改数据的地方,进行修改并将数据输出到另一个流中.
这将是一次通过,没有XML解析,没有内存中的XML树构建.
SAX值得考虑而不是DOM解析器.
使用DOM,您需要支付加载文档的开销,但一旦加载的数据可以快速访问和更新.
使用SAX,您必须为begin-element,end-element等编写处理程序,但是您在执行操作时可以更灵活.
虽然它可能对您的情况没有帮助,但SAX在您搜索时非常有用,因为您可以随时停止解析,因此一旦找到了您想要的内容,就可以停止.
如果您的程序在知道要进行哪些更改之前不需要解析所有数据,那么您可以编写SAX处理程序,它只是在读取数据时更新数据并以其他方式传递数据,因此它会传输数据而不是必须将它全部加载到任何类型的内存结构中.这将使解决方案非常可扩展,因为您不会遇到非常大的文件的内存限制.
对于它的价值,我倾向于使用MSXML DOM和SAX解析器.可以说它们并不是表现最好的,我认为可能有更多人在努力改进它们,所以它们会变得越来越好.