搜索大型XML文件以获取字符串的最有效方法

时间:2015-08-27 14:46:34

标签: php xml

我是PHP的新手(通常是编程),我正在开发一个项目,该项目应该从网站下载一个大的(大约85mb)XML文件,搜索一个字符串,然后编辑字符串位置的文本。似乎有很多方法可以使用PHP和其他语言进行搜索。有人可以推荐最有效或更进一步的阅读吗? - 谢谢。

编辑:我应该提到我要搜索的许多字符串都是非XML /纯文本。所以我不能依赖任何XML格式。这些XML工具对此仍然有用吗?或者我应该使用其他东西?像strpos()那样简单吗? (但我可以使用85mb文件作为大海捞针吗?)

2 个答案:

答案 0 :(得分:0)

$file = "your.xml";
$doc = new DOMDocument();
$doc->load($file);

它支持XPath。

如果XML超过100-150 mb,建议将xml发送到本地应用程序,例如在C或Java上,proccecing,put in directory,以及在PHP中获取目录/文件名。

它比在PHP中处理大数据更快。

答案 1 :(得分:0)

您想要使用XmlReaderXmlWriter。它们是像xml处理器一样的SAX,不需要将整个文档加载到内存中。

API相当低级。 hakre/xmlreaderiterator package为流式xml转换提供了更高级别的API。以下代码将所有文本节点转换为大写,并将结果打印到stdout:

<?php

require 'vendor/autoload.php';

$reader = new XMLReader();
$reader->open('https://raw.githubusercontent.com/hakre/XMLReaderIterator/master/examples/data/movies.xml');

$writer = new XMLWriter();
$writer->openUri('php://output');
$writer->startDocument();

$iterator = new XMLWritingIteration($writer, $reader);

foreach ($iterator as $node) {
    if ($node->nodeType === XMLReader::TEXT) {
        // operate on text nodes
        $writer->writeRaw(strtoupper($node->value));
    } else {
        // copy everything else as is
        $iterator->write();
    }
}