diff options
| author | Marcus Boerger <helly@php.net> | 2003-11-13 20:32:38 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2003-11-13 20:32:38 +0000 |
| commit | 2b35596d7f3762b805a24df481a65ed3cc5de319 (patch) | |
| tree | b16f1bfd808bd4415cef7b9100889a11f733181f /ext/simplexml/simplexml.c | |
| parent | 2bed6c2b8a3e9f2a005257489cf17abf055709a7 (diff) | |
| download | php-git-2b35596d7f3762b805a24df481a65ed3cc5de319.tar.gz | |
Fix classname, CDATA handling (semantically identical to text) and
iterators (Return sub elements as objects, converted to string you get
the text).
Diffstat (limited to 'ext/simplexml/simplexml.c')
| -rw-r--r-- | ext/simplexml/simplexml.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index b6ca21b51b..ca18e0b40a 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -553,16 +553,15 @@ sxe_properties_get(zval *object TSRMLS_DC) 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 @@ static int 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 @@ zend_object_iterator_funcs php_sxe_iterator_funcs = { 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: |
