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

PHP-只从XML中获取某些数据,而不是整个XML文件?,php,xml,parsing,simplexml,Php,Xml,Parsing,Simplexml,我需要从xml文件中获取在线用户数据,但simplexml文件的加载速度似乎很慢。文件很大,因为在线用户很多。我正试图将它们分页,每页20页,我有 <?php $xml = simplexml_load_file('http://domain.tld/data.xml'); ?> 然后 但每页应该有20个这样的页面 <?php echo $xml->who_is_online[2]->thumbnail_image; ?> <?php echo

我需要从xml文件中获取在线用户数据,但simplexml文件的加载速度似乎很慢。文件很大,因为在线用户很多。我正试图将它们分页,每页20页,我有

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

然后


但每页应该有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到用户20的数据,然后在第二页上获取用户21到40的数据,等等。在第二页上,我有相同的代码,但是获取[21]、[22]、[23]等的数据

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

见:

但是你可以通过你的“谁在线”来迭代

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;
}
对于($i=0;$iwho\u是在线的[$i]>缩略图图像;
echo$xml->who_是_online[$i]->显示_名称;
echo$xml->who_\u online[$i]->显示年龄;
}

SimpleXML无法部分读取文档。即使使用XPath筛选器,整个文档仍会在后台解析

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


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

如何实现这一点,如果我没有使用实际数字,而是在每个页面上定义$current,然后为每个用户定义[($current+1)],[($current+2)],等等?如果$current是您的实际页面,那么[$current+$I]应该可以。我也会试试。$current是当前的起始用户。我有另一个变量来定义页面。相同的数据通过json或yaml提供给我。有没有办法部分处理json或yaml?实际上没有,因为为了从文件中提取某些数据,必须首先读取和解析整个文件。唯一的实际选择是将数据缓存到某个地方(如答案中所示),或要求数据提供程序允许您传递页码以进行筛选。
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;
}