summaryrefslogtreecommitdiff
path: root/ext/simplexml/simplexml.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-11-13 20:32:38 +0000
committerMarcus Boerger <helly@php.net>2003-11-13 20:32:38 +0000
commit2b35596d7f3762b805a24df481a65ed3cc5de319 (patch)
treeb16f1bfd808bd4415cef7b9100889a11f733181f /ext/simplexml/simplexml.c
parent2bed6c2b8a3e9f2a005257489cf17abf055709a7 (diff)
downloadphp-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.c34
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: