#41662 [Opn->Csd]: SimpleXML->children() misleading result

From: Date: Thu, 07 Jan 2010 12:25:11 +0000
Subject: #41662 [Opn->Csd]: SimpleXML->children() misleading result
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-3649@lists.php.net to get a copy of this message
ID: 41662 Updated by: kalle@php.net Reported By: kenashkov at gmail dot com -Status: Open +Status: Closed Bug Type: Documentation problem Operating System: Fedora Core 4 PHP Version: 5.2.4RC3-dev -Assigned To: +Assigned To: kalle New Comment: This bug has been fixed in the documentation's XML sources. Since the online and downloadable versions of the documentation need some time to get updated, we would like to ask you to be a bit patient. Thank you for the report, and for helping us make our documentation better. Previous Comments: ------------------------------------------------------------------------ [2010-01-07 12:25:06] svn@php.net Automatic comment from SVN on behalf of kalle Revision: http://svn.php.net/viewvc/?view=revision&revision=293214 Log: Fixed bug #41662 (SimpleXML->children() misleading result) ------------------------------------------------------------------------ [2007-08-19 20:08:52] jani@php.net This is how SimpleXML is (not so simple). Use count() like was suggested on the mailing list. Reclassified as documentation bug. ------------------------------------------------------------------------ [2007-08-19 18:37:29] kenashkov at gmail dot com Still the same result with 5.2.4RC3-dev. ------------------------------------------------------------------------ [2007-08-17 02:37:22] vrana@php.net There's no reason why a node without subnode should return anything in its children(). Especially if there is attributes() method returning attributes. Please fix the sources. ------------------------------------------------------------------------ [2007-06-12 07:36:50] kenashkov at gmail dot com Description: ------------ Testing an SimpleXMLElement object for children is unconsistent. Here is an example: -------- $str = '<rootnode><subnode></subnode></rootnode>'; $x = new SimpleXMLElement($str); if($x->subnode->children()) print 'yes'; else print 'no'; --------- will print 'no'; If the $str='<rootnode><subnode><newnode></newnode></subnode></rootnode>'; it will print yes. But the same will happen if the subnode has an attribute like: $str = '<rootnode><subnode id="2"></subnode></rootnode>'; But if we use foreach($x->subnode->children() as $key=>$value) in the latter example we will not get anything (which is correct). I think is wrong the children() method to return object when there are no child objects and the node has attributes (because for querying the attributes we have the attributes() method). This was discussed in php-dev list - http://marc.info/?l=php-dev&m=118001203709813&w=2 If this is not a bug, I think a note regarding this behaviour must be added in the docs. Reproduce code: --------------- $str = '<rootnode><subnode id="2"></subnode></rootnode>'; $x = new SimpleXMLElement($str); if($x->subnode->children()) print 'yes'; else print 'no'; Expected result: ---------------- no Actual result: -------------- yes ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41662&edit=1

« previous php.doc.bugs (#3649) next »