我们在以下情况下使用 SAX:
我们该死的确信,只需通过文件一次就足够了。顺便说一句,大多数时候都是这样。大多数情况下,可以将执行多次传递或返回/转发指针的代码重构为一次传递。
当我们通过某些流媒体渠道(例如通过网络)接收 xml 文件时,我们可能希望在整个文件完全下载之前进行实时读取。SAX 可以处理部分下载的文件,DOM 不能。
当我们对 XML 中的特定位置感兴趣时,而不是对完整的文档感兴趣。例如,Atom Feed 最适用于 SAX,但要分析 WSDL,您将需要 DOM。
我们在以下情况下使用 DOM:
好吧,当单程通行证不行时。我们需要在文件中上下移动。
当 XML 在磁盘上并且我们不需要实时读数时。我们可以慢慢来,加载它,阅读它,分析它,然后得出结论。
当你的老板要求在午餐前做而你不打扰质量时。
现在回答你的问题
您提供了:
- 你有一个巨大的文件:........SAX +1
- 解析多次:.....DOM +1
两者都获得平等的选票。将您现有的知识库添加到其中。(熟悉 SAX?)。巨大有多大?您所说的 XML 和内存都很大。即使是 100MB 的文件也没什么大不了的。DOM 可以处理它。您需要每天解析多次。如果一个操作在几分钟内完成,那么将数据保留在内存中接下来的几个小时似乎并不明智。在这种情况下,您将失去 DOM 的好处。但是如果一个操作本身需要一个小时,那么你保留预处理信息是完全正确的。
正如我所指出的,您没有提供足够的统计数据。统计数据大小、内存大小、DOM 中的加载时间、处理时间,您每天究竟需要多少次?您的机器在此期间做什么?闲置或分析其他此类文件?
接受这些统计数据。要么把它贴在这里,要么自己分析它们,你就会得出结论。