"Non-nesne özelliğini almak için çalışılıyor"

2 Cevap php

Bir XML besleme ayrıştırmak SimpleXML ile bir PHP komut dosyası kullanıyorum. Ben XML içeriği üzerinde hiçbir kontrole sahip.

   try { $xml = @new SimpleXMLElement($fetchResult); } catch (Exception $e) { errorHandle($e->getMessage());}

    $userNick = $xml->View->ScrollView->VBoxView->View->MatrixView->VBoxView[0]->HBoxView->TextView->SetFontStyle->b;
    foreach ($xml->View->ScrollView->VBoxView->View->MatrixView->VBoxView[0]->VBoxView as $pathToSubTree){       
        foreach ($pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView as $canopy){
                //Do some stuff now that we've found the canopy of the tree
        }

        $canopy = $pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView;
        if(is_null($canopy)){
                //Do some stuff stuff is the canopy was not traceable   
        }
    }

    $pathToSubTree = $xml->View->ScrollView->VBoxView->View->MatrixView->VBoxView[0]->VBoxView;
    if(is_null($pathToSubTree)){
         //Do some stuff stuff is the subTree path was not traceable    
    }

    unset($xml);

Ben eminim aynı nedene bağlı olan kulüpler iki hataları çok alıyorum:

PHP Notice:  Trying to get property of non-object in myScript.php on line 45
PHP Warning:  Invalid argument supplied for foreach() in myScript.php on line 45
PHP Notice:  Trying to get property of non-object in myScript.php on line 76

Hat 45 (yukarıdan) olduğu:

foreach ($pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView as $canopy){

Hat 76 (yukarıdan) olduğu:

$canopy = $pathToSubTree->MatrixView->View->VBoxView->VBoxView->HBoxView[0]->VBoxView->MatrixView->VBoxView;

Ben bu hata benim yolum belli XML için bir dizi olmaktan değil dizilerin biri neden olduğu eminim, ama bazı zamanlar bir dizi olabilir.

Bunlarla başa çıkmak için doğru yolu nedir?

2 Cevap

etiketler birden çok kez görünebilir veya tek başına olabilir için:

is_array($doc->node) ? $doc->node[0] : $doc->node

ya da kullanımı daha kolay olabilir:

$node->xpath('MatrixView/View/XBoxView/VBoxView/HBoxView[1]/VBoxView/MatrixView/VBoxView)

[1] İlk eleman eşleşti

İşte bu hata mesajları bir açıklama:

PHP Warning:  Invalid argument supplied for foreach() in myScript.php on line 45

This one is easy. You've passed something that couldn't be iterated over to foreach, such as foreach (false as $x). In your case, your crazy-long series of $foo->bar->baz probably returns null because the element doesn't exist.

PHP Notice:  Trying to get property of non-object in myScript.php on line 45

"Non-nesne," -> önce değişken sağa eder "özelliği almak için çalışılıyor" mutlaka, bir nesnenin özellik "bar" ->bar yazılı olduğunu biliyoruz. Bu demektir ki bir yerlerde senin $xml->View->ScrollView->... var ve SimpleXML döner null olmayan bir unsur var. Sonuç olarak bir sonraki -> bu hatayı tetikler.

Kısacası, eleman için "yol" yanlıştır.