ID: 37817 Updated by: [EMAIL PROTECTED] Reported By: ecervetti at ch-hyeres dot fr -Status: Assigned +Status: Bogus Bug Type: SimpleXML related Operating System: Linux mandriva 2006 PHP Version: 5.1.4 Assigned To: helly New Comment:
Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php When you access an non-existenet element SimpleXML creates a node in the DOM tree. This node is then present for future iterations of the DOM tree. To avoid creating the DOM node, use the isset($xml->typebal3) code to check for its presence. This will allow you to determine if the node exists and not create if it does not. Previous Comments: ------------------------------------------------------------------------ [2006-08-08 17:09:20] ale at estudionemo dot com I've found a post in the mailing list about this issue: http://www.mail-archive.com/php-general@lists.php.net/msg190494.html It says that "it's not a bug, it's a feature". It behaves in the same way in PHP 5.1.4 under Solaris 10 and Ubuntu 6.06. ------------------------------------------------------------------------ [2006-06-19 08:02:57] [EMAIL PROTECTED] Verified with 5.2 ------------------------------------------------------------------------ [2006-06-15 12:24:42] ecervetti at ch-hyeres dot fr Description: ------------ I try to access a particular element of xml data with the foreach($xml->name_of_element ....) syntax. But I don't know if this element exists. When the element don't exists, no problem the first time; It don't goes inside the loop. But If I call the same loop a second time, it goes inside the loop, as if the element exists. Reproduce code: --------------- $string = "<data><typebal1>pim</typebal1><typebal2>poom</typebal2></data>"; $xml = simplexml_load_string($string); foreach($xml->typebal3 as $bal) { print "<br />I should not be here<br />"; } foreach($xml->typebal3 as $bal) { print "<br />I should either not be here<br />"; } //this script renders "I should either not be here" Expected result: ---------------- this script should not print anything Actual result: -------------- this script renders "I should either not be here" ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37817&edit=1