2011-07-30 12 views
6

मेरे पास निम्न (सरलीकृत एक्सएमएल) है:सरल एक्सएमएल के साथ तत्व मौजूद है या नहीं?

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

किसी कारण से उत्पाद कभी मान्य नहीं होता है।

संपत्ति_एक्सिस्ट्स यह पता लगाने का सही तरीका नहीं है कि $ उत्पाद में कोई आर्टन तत्व है या नहीं?

उत्तर

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; 
} 
संबंधित मुद्दे