Alan yoksa nasıl PHP ile bir XML ayrıştırma aşağıdaki foreach bipass mı?

2 Cevap php

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?

2 Cevap

I isset() aradığınız muhtemelen ne olduğunu düşünüyorum:

if (isset($tx->custom_fields[0]->custom_field)) {
    foreach ($tx->custom_fields[0]->custom_field as $field) {
        $affiliateID = $field->custom_field_value[0]->tagData;
    }
}

(Bir hata neden karşıt olarak) $tx->custom_fields, sonra da $tx->custom_fields[0], ayrı ayrı, isset () kullanılarak derin düzeyde return false kontrol etmeye gerek var unutmayın bile ([{if 0)]} yok.

[0] ilk $ tx-> custom_fields ve $ tx-> custom_fields varlığını kontrol edin ve daha sonra kullanmak gerekir.