Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中比较XML而不使用哈希_Php_Xml_Simplexml - Fatal编程技术网

在PHP中比较XML而不使用哈希

在PHP中比较XML而不使用哈希,php,xml,simplexml,Php,Xml,Simplexml,我正在阅读一个XML提要,希望与旧版本进行比较以检查更新 目前我的问题是,我似乎无法复制SimpleXML对象,另一个问题是我不确定是否可以直接比较它们 这是我的代码。我显然只是在本地文件上测试,但我打算最终从web加载 长时间睡眠可以吗?我在想15分钟的间隔对于我来说已经足够了 error_reporting(E_NOTICE); $file = 'tmbdata_sm.xml'; $xml_old = ""; while(true){ $xml = simplexml_load_file

我正在阅读一个XML提要,希望与旧版本进行比较以检查更新

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

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

长时间睡眠可以吗?我在想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);
}

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


我会尝试使用您觉得合适的方式下载xml(比如),然后比较xml文本字符串,然后当您发现它们不同时,使用
simplexml\u load\u string()
解析xml文本。

如果没有定义“更新”在您的上下文中的含义,恐怕您的问题仍然没有答案。字符串比较可能有效,但更好更快的方法是使用
filemtime()


此外,您还应该避免像现在这样在无限循环中使用
sleep()
。我不认为让PHP无限期地运行对您的计算机或服务器是健康的。正确的方法是在使用UNIX时,或在Windows中时。

或者甚至只在URL上使用
file\u get\u contents()
,因为这相当于
simplexml\u load\u file()
。否则,我将给出相同的答案:只需将它们作为字符串进行比较。如果最新文档中xml元素的顺序发生变化怎么办?文本比较将表明文档是不同的,即使它们具有相同的语义。在进行任何比较之前,您需要对下载的版本进行排序。看看@xvga,你无缘无故地把事情复杂化了。如果没有词汇表的详细知识,就不能假设元素顺序对语义是重要还是不重要。此外,应用程序可能仍然对更改感兴趣,即使文档在语义上可能是等价的。(以评论的变化为例)@RolandBouman好吧,这发生在我的情况下:秩序对我来说并不重要semantics@xvga我们是否可以同意,在一般情况下,在没有进一步说明需求的情况下,元素是否应该被排序并不明显,如果是,应该如何排序?filemtime()这将是一个优雅的解决方案,但由于我想从http读取xml,我认为它不会起作用(尽管我会尝试)。你能解释一下为什么在无限循环中使用睡眠是件坏事吗?我不是不同意你,我只是想知道,但找不到任何信息(我的意思是从cmd行运行php,显然在web上无限循环脚本不是一件好事)。我的主机(nfs)目前不允许cron作业,我可以在我的本地机器上看到php既不使用cpu也不使用ram,使用睡眠(5*60)来检查http头?我不确定