在没有散列的情况下比较PHP中的XML

时间:2009-12-20 19:03:04

标签: php xml simplexml

我正在阅读XML Feed,并希望与旧版本进行比较以检查更新。

我目前的问题是我似乎无法复制SimpleXML对象,另一个问题是我不确定我可以直接比较它们。

这是我的代码。我显然只是测试本地文件,但我打算最终从网上加载。

可以长时间使用睡眠吗?我认为15分钟的间隔通常足以达到我的目的。

error_reporting(E_NOTICE);
$file = 'tmbdata_sm.xml';

$xml_old = "";
while(true){
 $xml = simplexml_load_file($file);

 if($xml != $xml_old){
    foreach($xml->channel->item as $item){
        echo $item->title . "\n";
        echo $item->link . "\n";
    }
    $xml_old = clone $xml;
    $xml = "";
 }else{
    echo 'no change';
 }

sleep(60);
}

2 个答案:

答案 0 :(得分:1)

如果没有定义“更新”在您的上下文中的含义,我担心您的问题可能仍未得到答复。字符串比较可能有效,但更好更快的方法是使用filemtime() which lets you know the last time that the file was modified

此外,您应该像在进行无限循环一样避免使用sleep()。我不认为让PHP无限期运行对您的计算机或服务器来说是健康的。执行此操作的正确方法是在使用UNIX时为cronjob,在Windows中为task scheduler

答案 1 :(得分:0)

我认为你不能用这种方式比较简单的xml对象。

我会尝试使用您认为合适的任何内容(例如cURL extension)下载xml,然后比较xml文本字符串,然后当您发现它们不同时,使用simplexml_load_string()进行解析xml文本。