我如何使用SimpleXML来处理一个巨大的XML文件,同时避免内存和性能问题


How can I handle a huge XML file using SimpleXML but to prevent memory and performance problems?

我试图避免XMLReader用于我构建的具有巨大XML文件的应用程序。SimpleXML很容易编写,我想知道是否有任何方法可以在相当繁忙的服务器中成功处理它(内存和性能问题)。我要做的是,从该XML中回显一些数据,主要来自搜索表单

好吧,如果您真的想在没有XMLReader的情况下做到这一点,您可以这样做:

使用fopen打开并读取N个字节的文件

修复结局:(这是艰难的部分,但它是完全可行的)你可以关闭任何未关闭的东西,如果你碰巧在一些文本的中间,也可以在需要的时候回溯。

当XML块最终有效时,您可以使用simplexmL解析它。

处理该块或将其保存在单独的XML文件中创建另一个块……直到你拥有了它们。

显然,如果您的XML很复杂,这可能会有点麻烦。

概要:通过创建您自己的定制/非常便宜的xml解析器/修复器,您可以将一个巨大的xml文件拆分为多个较小的文件。

如果您的文件主要是许多相似的节点,例如图书的大列表,其中图书的数量很大,但图书记录本身很小,那么您可以使用smura答案的一种变体,即使用XMLReader遍历每个节点,然后将节点转换为XML字符串并将其传递给SimpleXML。这样,您就可以为大列表使用流解决方案,但是一旦您获得了每个记录,您就可以轻松地使用SimpleXML访问记录。