无法使用XmlStreamer读取大文件

时间:2014-03-09 07:30:30

标签: php xml

我使用xmlStreamer来读取xml但无法读取整个xml。这个函数只返回两行?如何获取xml的全部数据?

<?php
class SimpleXmlStreamer extends XmlStreamer
{
    public function processNode($xmlString, $elementName, $nodeIndex)
    {
        $xml = simplexml_load_string($xmlString);
        $something = (string)$xml->Something->SomethingElse->ReadThis;
        echo "$nodeIndex: Extracted string '$something' from parent node '$elementName'\n";     
        return true;
    }
}

$streamer = new SimpleXmlStreamer("myLargeXmlFile.xml");
if ($streamer->parse()) {
    echo "Finished successfully";
} else {
    echo "Couldn't find root node";
}
?>

3 个答案:

答案 0 :(得分:1)

解析远程XML时出现问题。您可能会收到此警告: “警告:filesize()[function.filesize]: 你的文件 .xml在 路径 \ XmlStreamer中失败第32行的.php“。如果是这种情况,您可以在XmlStreamer.php的第32行替换以下行:

$this->totalBytes = filesize($mixed);

这两行:

$head = array_change_key_case(get_headers($mixed, TRUE));
$this->totalBytes = $head['content-length'][1]; 

获取远程文件文件大小的解决方案来自:Warning : filesize function failing to operate

在此之后,根据文件大小,你可能会遇到memory_limit问题,但你可能会没事。

注意:我不确定为什么$head['content-length'][1]必须乘以字节数。否则,不会解析整个文件。也许其他人可以解决这个问题。

答案 1 :(得分:0)

可能是因为你试图使用更多的内存,然后在PHP中定义。 尝试仅在此特定代码中扩展您的PHP内存使用。

但是首先在一个小的xml上尝试你的代码并检查你的代码是否真的有效。

答案 2 :(得分:0)

只有记忆问题。我使用XMLReader类来读取xml数据并轻松获取数据。