2011-07-30 16 views
6

Mam następujące XML (uproszczony):Jak sprawdzić, czy element istnieje z SimpleXML?

<?xml version="1.0" encoding="UTF-8" ?> 

<products> 
    <product> 
    <artnr>xxx1</artnr> 
    </product> 
</products> 

oraz następujące (ponownie uproszczony kod PHP):

$xml= @simplexml_load_file($filename); 

foreach ($xml->product as $product) { 
    if (!$this->validate_xml_product($product)) { 
     continue; 
    } 
} 

function validate_xml_product($product) 
{ 
    if (!property_exists('artnr', $product)) { 
     // why does it always validate to true? 
    } 
} 

jakiegoś powodu produkt nie sprawdza poprawność.

Czy property_exists nie jest prawidłowym sposobem sprawdzenia, czy istnieje element artnr w produkcie $?

Odpowiedz

9

Kolejność parametru w kodzie jest odwrotna. Poprawnie jest najpierw obiekt, a następnie nazwa własności:

if (!property_exists($product, 'artnr')) { 

I najwyraźniej działa to tylko dla "prawdziwych" właściwości. Jeśli właściwość jest zaimplementowana przy użyciu metody __get -Method, to również nie zadziała.

+0

AAARRRGGGGHHH ... Cholera PHP do wkręcania z narodami umysłu po prostu losowo przełączanie parametrów funkcji! :) Dzięki! – PeeHaa

1

Zastosowanie:

function validate_xml_product($product) 
{ 
    $children=$product->children(); 
    foreach($children as $child){ 
     if ($child->getName()=='artnr') { 
      return true; 
     } 
    } 
    return false; 
} 
Powiązane problemy