2011-07-30 70 views
6

我有以下(簡化XML):如何使用SimpleXML檢查元素是否存在?

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

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

而下面的(再次簡化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? 
    } 
} 

出於某種原因,該產品從未驗證。

是不是property_exists是找出$ product中是否有artnr元素的正確方法?

回答

9

代碼中參數的順序是相反的。正確的第一個對象然後屬性名稱:

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

而且顯然這隻適用於「真實」屬性。如果該屬性是使用__get-方法實現的,則這也不起作用。

+0

AAARRRGGGGHHH ......你這該死的PHP通過只是隨機切換功能參數與人民心中鬼混了! :) 謝謝! – PeeHaa

1

用途:

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