Я анализирую опубликованный зашифрованный и опубликованный файл XML, отправленный на мой сайт с другого сервера.
В настоящее время сортировка XML (расшифрована) выглядит так:
<?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>
А парсер выглядит так:
$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;
}
}
Вышеуказанное работает , если только в XML, отправляемом на наш сервер, отсутствуют узлы custom_fields. Затем выдает ошибку «Неопределенное свойство: XMLTag :: $ custom_field».
Так как я хак, я думал, что что-то вроде следующего будет работать, но это не так:
if($tx->custom_fields[0]->custom_field) {
foreach ($tx->custom_fields[0]->custom_field as $field) {
$affiliateID = $field->custom_field_value[0]->tagData;
}
}
Это кажется мне логичным, но что не так с моей логикой? Как я могу сказать моему сценарию не выполнять foreach, если этот узел не существует в xml?