Ben başka bir sunucudan siteme gönderilen bir şifreli ve yayınlanmıştır yayınlanmıştır XML dosyasını ayrıştırma.
Şu anda (şifresi) XML sorta böylece gibi görünüyor:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<transactions>
<transaction>
<id>407145</id>
<store_id>4067</store_id>
<custom_fields>
<custom_field>
<custom_field_name>affiliateID</custom_field_name>
<custom_field_value>25</custom_field_value>
</custom_field>
</custom_fields>
</transaction>
</transactions>
Ve ayrıştırıcı böylece gibi görünüyor:
$XMLData = rc4crypt::decrypt($key, urldecode($_POST["XMLData"]));
$data = new XMLParser($FoxyData); // Parse that XML.
$data->Parse();
// go through each of the nodes
foreach ($data->document->transactions[0]->transaction as $tx) {
$id = $tx->id[0]->tagData;
$store_id = $tx->id[0]->tagData;
// get the affiliateID
foreach ($tx->custom_fields[0]->custom_field as $field) {
$affiliateID = $field->custom_field_value[0]->tagData;
}
}
Yukarıdaki eserler unless bizim sunucuya gönderilen XML custom_fields düğümleri eksik. Sonra bir hata ": XMLTag :: $ custom_field Tanımsız mülkiyet" yukarı atar.
Ben bir hack olduğum için, aşağıdaki gibi bir şey işe düşündüm, ama öyle değil:
if($tx->custom_fields[0]->custom_field) {
foreach ($tx->custom_fields[0]->custom_field as $field) {
$affiliateID = $field->custom_field_value[0]->tagData;
}
}
Bu bana mantıklı görünüyor - ama ne benim mantığı ile yanlış? Düğüm xml yoksa nasıl foreach yapmak değil benim komut söyleyebilir?