我编写了一个小函数,用simpleXML读取XML文件,并使用Pear Benchmark Iterate计时。我已经读过simpleXML和DOM将整个XML文件放入内存中,这会对大型文件产生大量开销。
下面的函数是一个相对较小的大小,我只从XML文件中提取了10个值。
以下函数的迭代(xml filesize:200kb)平均需要2.5秒才能完成。
有人可以建议使用PHP XMLparser,相关类或者将xml解析成数组的其他有效方法吗?
SimpleXML版本
function getItems($file_id, $item_count=5)
{
switch ($file_id)
{
case '1':
$file = "http://xml_file.xml";
if ($xml = simplexml_load_file($file))
{
$i=0;
foreach ($xml->info as $info)
{
if ($i < $item_count)
{
$var[] = array(
"id" => (string)$info->id,
"name" => (string)$info->name);
}
$i++;
}
return $var;
}
}
}
答案 0 :(得分:1)
XML Parser模块可能是更好的选择,不需要一些外部库,虽然它需要一点思维转变。他们的回报是数据永远不会完整地加载到内存中。
简而言之,您需要以树降序处理XML文档,并在树中记录您的位置,因为打开和关闭标记是通过处理程序报告给您的。
这个模块不是OO似乎令人生畏,但xml_set_object缓解了这一点。