]> granicus.if.org Git - php/commitdiff
- Add another write case
authorMarcus Boerger <helly@php.net>
Sun, 26 Feb 2006 13:37:54 +0000 (13:37 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 26 Feb 2006 13:37:54 +0000 (13:37 +0000)
ext/simplexml/simplexml.c
ext/simplexml/tests/028.phpt [new file with mode: 0755]

index 835bb394ee72af5bf7e4c42918e2fa4924596ca5..e95a65939717cc91333b9f804ad49907c07f376b 100644 (file)
@@ -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 (executable)
index 0000000..753056b
--- /dev/null
@@ -0,0 +1,42 @@
+--TEST--
+SimpleXML: Adding an elements without text
+--SKIPIF--
+<?php if (!extension_loaded("simplexml")) print "skip"; ?>
+--FILE--
+<?php 
+$xml =<<<EOF
+<people></people>
+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."</$name>\n";
+}
+
+
+$people = simplexml_load_string($xml);
+traverse_xml($people);
+$people->person['name'] = 'John';
+traverse_xml($people);
+
+?>
+===DONE===
+--EXPECTF--
+<people>
+</people>
+<people>
+  <person name="John">
+  </person>
+</people>
+===DONE===