PHP - 只从XML获取某些数据,而不是整个xml文件?

时间:2014-03-12 11:41:08

标签: php xml parsing simplexml

我需要从xml文件获取在线用户数据,但simplexml_load_file似乎很慢。文件很大,因为在线用户很多。我试图在每页20页中对它们进行分页...

<?php $xml = simplexml_load_file('http://domain.tld/data.xml'); ?>

然后

<?php echo $xml->who_is_online[1]->thumbnail_image; ?>
<?php echo $xml->who_is_online[1]->display_name; ?>
<?php echo $xml->who_is_online[1]->display_age; ?>

但每页应该有大约20个。

<?php echo $xml->who_is_online[2]->thumbnail_image; ?>
<?php echo $xml->who_is_online[2]->display_name; ?>
<?php echo $xml->who_is_online[2]->display_age; ?>
<?php echo $xml->who_is_online[3]->thumbnail_image; ?>
<?php echo $xml->who_is_online[3]->display_name; ?>
<?php echo $xml->who_is_online[3]->display_age; ?>

等。 (到20)

在不读取每个页面加载的整个文件的情况下,从XML获取此特定数据的更好方法是什么?我的意思是在第一页上为用户1获取数据,然后在第二页上获取用户21到40的数据等。在第二页上,我有相同的代码,但获取[21],[22],[23]的数据]等等。

2 个答案:

答案 0 :(得分:1)

  

DOM解析器(例如SimpleXML)只能加载整个文档。

请参阅:Can SimpleXML load only a partial of a XML?

但您可以遍历您的'who_is_online&#39;。

for ($i=0;$i<20;$i++){
    echo $xml->who_is_online[$i]->thumbnail_image;
    echo $xml->who_is_online[$i]->display_name;
    echo $xml->who_is_online[$i]->display_age;
}

答案 1 :(得分:0)

SimpleXML无法部分阅读文档。即使使用XPath过滤器,整个文档仍然在后台解析。

一种可能的解决方案是使用cronjob或计划任务定期调用PHP脚本,该脚本下载XML,解析它并将数据插入SQL数据库(不要忘记先删除旧数据)。 / p>

当访问者请求页面时,只需使用数据库上的SQL查询对数据进行分页。