2011-07-30 13 views
6

Ho il seguente (XML semplificato):Come verificare se l'elemento esiste con SimpleXML?

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

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

E il seguente (codice PHP di nuovo semplificata):

$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? 
    } 
} 

Per qualche motivo il prodotto non convalida.

La proprietà_exist non è il modo corretto di scoprire se esiste un elemento artnr in $ product?

risposta

9

L'ordine del parametro nel codice è invertito. Corretto è prima l'oggetto quindi la proprietà nome-:

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

E a quanto pare questo funziona solo per le proprietà "reali". Se la proprietà viene implementata utilizzando il metodo __get, questo non funzionerà.

+0

AAARRRGGGGHHH ... Accidenti a te PHP per avvitare con i popoli mente solo casualmente passando i parametri di funzione! :) Grazie! – PeeHaa

1

Usa:

function validate_xml_product($product) 
{ 
    $children=$product->children(); 
    foreach($children as $child){ 
     if ($child->getName()=='artnr') { 
      return true; 
     } 
    } 
    return false; 
} 
Problemi correlati