From: Marcus Boerger Date: Sun, 26 Feb 2006 13:37:54 +0000 (+0000) Subject: - Add another write case X-Git-Tag: RELEASE_1_2~76 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=24d83ebd0fb75efac800a12cf47daebf1040b908;p=php - Add another write case --- diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 835bb394ee..e95a659397 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -451,9 +451,14 @@ static void sxe_prop_dim_write(zval *object, zval *member, zval *value, zend_boo attr = (xmlAttrPtr)node; test = sxe->iter.name != NULL; } else if (sxe->iter.type != SXE_ITER_CHILD) { + mynode = node; node = php_sxe_get_first_node(sxe, node TSRMLS_CC); attr = node ? node->properties : NULL; test = 0; + if (attribs && !node && sxe->iter.type == SXE_ITER_ELEMENT) { + node = xmlNewChild(mynode, mynode->ns, sxe->iter.name, NULL); + attr = node->properties; + } } mynode = node; diff --git a/ext/simplexml/tests/028.phpt b/ext/simplexml/tests/028.phpt new file mode 100755 index 0000000000..753056b9ad --- /dev/null +++ b/ext/simplexml/tests/028.phpt @@ -0,0 +1,42 @@ +--TEST-- +SimpleXML: Adding an elements without text +--SKIPIF-- + +--FILE-- + +EOF; + +function traverse_xml($xml, $pad = '') +{ + $name = $xml->getName(); + echo "$pad<$name"; + foreach($xml->attributes() as $attr => $value) + { + echo " $attr=\"$value\""; + } + echo ">" . trim($xml) . "\n"; + foreach($xml->children() as $node) + { + traverse_xml($node, $pad.' '); + } + echo $pad."\n"; +} + + +$people = simplexml_load_string($xml); +traverse_xml($people); +$people->person['name'] = 'John'; +traverse_xml($people); + +?> +===DONE=== +--EXPECTF-- + + + + + + +===DONE===