helly Thu Nov 13 15:32:39 2003 EDT Added files: /php-src/ext/simplexml/tests 009.phpt 009.xml
Modified files: /php-src/ext/simplexml simplexml.c /php-src/ext/simplexml/tests 004.phpt Log: Fix classname, CDATA handling (semantically identical to text) and iterators (Return sub elements as objects, converted to string you get the text). Index: php-src/ext/simplexml/simplexml.c diff -u php-src/ext/simplexml/simplexml.c:1.83 php-src/ext/simplexml/simplexml.c:1.84 --- php-src/ext/simplexml/simplexml.c:1.83 Mon Nov 10 15:27:16 2003 +++ php-src/ext/simplexml/simplexml.c Thu Nov 13 15:32:37 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: simplexml.c,v 1.83 2003/11/10 20:27:16 helly Exp $ */ +/* $Id: simplexml.c,v 1.84 2003/11/13 20:32:37 helly Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -553,16 +553,15 @@ while (node) { SKIP_TEXT(node); - _get_base_node_value(sxe, node, &value TSRMLS_CC); - name = (char *) node->name; if (!name) { - name = "CDATA"; - namelen = sizeof("CDATA"); + goto next_iter; } else { namelen = xmlStrlen(node->name) + 1; } + _get_base_node_value(sxe, node, &value TSRMLS_CC); + h = zend_hash_func(name, namelen); if (zend_hash_quick_find(rv, name, namelen, h, (void **) &data_ptr) == SUCCESS) { if (Z_TYPE_PP(data_ptr) == IS_ARRAY) { @@ -884,7 +883,7 @@ sxe_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) { *class_name = estrdup("simplexml_element"); - *class_name_len = sizeof("simplexml_element"); + *class_name_len = sizeof("simplexml_element")-1; return 0; } @@ -1216,17 +1215,28 @@ static void php_sxe_iterator_current(php_sxe_iterator *iterator TSRMLS_DC) { + xmlNodePtr node; + while (iterator->node) { - SKIP_TEXT(iterator->node); + node = iterator->node; + + SKIP_TEXT(node); + + do if (node->ns) { + if (node->parent->ns) { + if (!xmlStrcmp(node->ns->href, node->parent->ns->href)) { + break; + } + } + } while (0); - _get_base_node_value(iterator->sxe, iterator->node, &iterator->data TSRMLS_CC); - if (!iterator->node->name) { - iterator->name = "CDATA"; - iterator->namelen = sizeof("CDATA"); + goto next_iter; } else { - iterator->namelen = xmlStrlen(iterator->node->name)+1; - iterator->name = (char *) iterator->node->name; + iterator->namelen = xmlStrlen(node->name)+1; + iterator->name = (char *) node->name; + MAKE_STD_ZVAL(iterator->data); + _node_as_zval(iterator->sxe, node, iterator->data TSRMLS_CC); } break; next_iter: @@ -1419,7 +1429,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "Simplexml support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.83 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.84 $"); php_info_print_table_row(2, "Schema support", #ifdef LIBXML_SCHEMAS_ENABLED "enabled"); Index: php-src/ext/simplexml/tests/004.phpt diff -u php-src/ext/simplexml/tests/004.phpt:1.3 php-src/ext/simplexml/tests/004.phpt:1.4 --- php-src/ext/simplexml/tests/004.phpt:1.3 Sat Oct 25 20:35:56 2003 +++ php-src/ext/simplexml/tests/004.phpt Thu Nov 13 15:32:38 2003 @@ -11,11 +11,10 @@ $elem1 = $sxe->elem1; $elem2 = $elem1->elem2; -echo($elem2->CDATA); - -echo "---Done---\n"; +var_dump(trim((string)$elem2)); ?> +===DONE=== --EXPECT-- simplexml_element Object ( @@ -27,10 +26,6 @@ [elem2] => simplexml_element Object ( - [CDATA] => simplexml_element Object - ( - ) - [elem3] => simplexml_element Object ( [elem4] => simplexml_element Object @@ -48,4 +43,5 @@ ) ) ----Done--- +string(11) "CDATA block" +===DONE=== Index: php-src/ext/simplexml/tests/009.phpt +++ php-src/ext/simplexml/tests/009.phpt --TEST-- SimpleXML and XPath --SKIPIF-- <?php if (!extension_loaded("simplexml")) print "skip"; ?> --FILE-- <?php $sxe = simplexml_load_file(dirname(__FILE__).'/009.xml'); foreach($sxe as $name=>$val) { var_dump($name); var_dump(get_class($val)); var_dump(trim((string)$val)); } ?> ===DONE=== --EXPECT-- string(5) "elem1" string(17) "simplexml_element" string(10) "Bla bla 1." string(6) "elem11" string(17) "simplexml_element" string(10) "Bla bla 2." ===DONE=== Index: php-src/ext/simplexml/tests/009.xml +++ php-src/ext/simplexml/tests/009.xml <?xml version='1.0'?> <!DOCTYPE sxe SYSTEM "notfound.dtd" [ <!ENTITY % incent SYSTEM "sxe.ent"> %incent; ]> <sxe id="elem1"> Plain text. <elem1 attr1='first'> Bla bla 1. <!-- comment --> <elem2> Here we have some text data. <elem3> And here some more. <elem4> Wow once again. </elem4> </elem3> </elem2> </elem1> <elem11 attr2='second'> Bla bla 2. </elem11> </sxe> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php