Vesselin Kenashkov wrote:
Here is the first one - how one can find does a SimpleXMLElement has child
nodes?
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.
The workaround I use is to extend the SimpleXMLElement
--------
class SimpleXMLElement2 extends SimpleXMLElement
{
public function has_children()
{
foreach($this->children() as $node)
return true;
return false;
}
}
------
And then we can check with if($x->subnode->has_children())
That's how SimpleXML is, but you can ease your pain by using count():
$x = new SimpleXMLElement($str);
if (count($x->subnode->children()))
print 'yes';
else
print 'no';
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php