şimdi ben aşağıdaki kodlar ile 2 farklı xml alıyorum.( sadece içerik farkı var node'lar ve diğerleri aynı )
<?php
function ayikla($__url)
{
$xml_values = array();
$contents = file_get_contents($__url);
$parser = xml_parser_create('');
if(!$parser)
return false;
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $xml_values);
xml_parser_free($parser);
if (!$xml_values)
return array();
$xml_array = array();
$last_tag_ar =& $xml_array;
$parents = array();
$last_counter_in_tag = array(1=>0);
foreach ($xml_values as $data)
{
switch($data['type'])
{
case 'open':
$last_counter_in_tag[$data['level']+1] = 0;
$new_tag = array('name' => $data['tag']);
if(isset($data['attributes']))
$new_tag['attributes'] = $data['attributes'];
if(isset($data['value']) && trim($data['value']))
$new_tag['value'] = trim($data['value']);
$last_tag_ar[$last_counter_in_tag[$data['level']]] = $new_tag;
$parents[$data['level']] =& $last_tag_ar;
$last_tag_ar =& $last_tag_ar[$last_counter_in_tag[$data['level']]++];
break;
case 'complete':
$new_tag = array('name' => $data['tag']);
if(isset($data['attributes']))
$new_tag['attributes'] = $data['attributes'];
if(isset($data['value']) && trim($data['value']))
$new_tag['value'] = trim($data['value']);
$last_count = count($last_tag_ar)-1;
$last_tag_ar[$last_counter_in_tag[$data['level']]++] = $new_tag;
break;
case 'close':
$last_tag_ar =& $parents[$data['level']];
break;
default:
break;
}
}
return $xml_array;
}
$url = $_POST['url'];
$arr = ayikla('deneme.xml'); // Veritabanındaki XML
$arr2 = ayikla($url); // Url'den gelen XML
print_r('<hr>');
print_r($arr);
print_r('<hr>');
print_r($arr2);
print_r('<hr>');
?>Amacım bu verilerden ulr'den gelen xml'deki verileri veritabanındaki veriler ile karşılaştırmak.değişiklik olmuşsa bunu bildirmek.
Nasıl yapabilirim.Sabahdan beri uğraşıyorum
Teşekkürler iyi çalışmalar.