我正在阅读XML提要,并希望与旧版本进行比较以检查更新。在PHP中比较XML而不使用散列
我目前的问题是我似乎无法制作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);
}
甚至只是在URL上使用'file_get_contents()',因为这相当于'simplexml_load_file()'。否则,我正在给出相同的答案:只是比较它们作为字符串。 – 2009-12-21 03:26:56
如果最新文档中xml元素的顺序发生变化,该怎么办?即使文档具有相同的语义,文本比较也会显示文档不同。 海事组织你需要在进行任何比较之前对下载的版本进行排序。看看http://stackoverflow.com/questions/2788404/sort-xml-nodes-with-php – xvga 2011-12-20 09:03:54
@xvga你没有很好的理由使事情变得复杂。如果没有关于词汇的详细知识,你不能仅仅假定元素顺序对于语义是重要的。此外,即使文档可能在语义上相同,应用程序仍然可能对更改感兴趣。 (想想例如评论的变化) – 2012-01-22 10:24:35