Je suis en train d'analyser un fichier XML envoyé crypté et posté envoyé à mon site à partir d'un autre serveur.Comment biphaser foreach dans une analyse XML avec PHP si le champ n'existe pas?
Actuellement, le XML (déchiffré) ressemble sorta comme ceci:
<?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>
Et l'analyseur ressemble à ceci:
$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;
}
}
Les travaux ci-dessus à moins XML envoyé à notre serveur est manquant les noeuds custom_fields. Ensuite, il génère une erreur "Propriété non définie: XMLTag :: $ custom_field".
Depuis que je suis un hack, je pensais que quelque chose comme ce qui suit fonctionnerait, mais il ne compte pas:
if($tx->custom_fields[0]->custom_field) {
foreach ($tx->custom_fields[0]->custom_field as $field) {
$affiliateID = $field->custom_field_value[0]->tagData;
}
}
Cela me semble logique - mais ce qui ne va pas dans ma logique? Comment puis-je dire à mon script de ne pas faire le foreach si ce noeud n'existe pas dans le xml?