/* {{{ _get_base_node_value()
*/
static void
-_get_base_node_value(xmlNodePtr node, zval **value TSRMLS_DC)
+_get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval **value TSRMLS_DC)
{
php_sxe_object *subnode;
char *contents;
}
} else {
subnode = php_sxe_object_new(TSRMLS_C);
- subnode->document = emalloc(sizeof(simplexml_ref_obj));
- subnode->document->refcount = 1;
- subnode->document->ptr = node->doc;
+ subnode->document = sxe_ref->document;
+ subnode->document->refcount++;
subnode->node = node;
(*value)->type = IS_OBJECT;
(*value)->value.obj = php_sxe_register_object(subnode TSRMLS_CC);
- zval_add_ref(value);
+ /*zval_add_ref(value);*/
}
}
/* }}} */
ulong h;
int namelen;
- ALLOC_HASHTABLE(rv);
- zend_hash_init(rv, 0, NULL, ZVAL_PTR_DTOR, 0);
-
sxe = php_sxe_fetch_object(object TSRMLS_CC);
+ if (sxe->properties) {
+ zend_hash_clean(sxe->properties);
+ rv = sxe->properties;
+ } else {
+ ALLOC_HASHTABLE(rv);
+ zend_hash_init(rv, 0, NULL, ZVAL_PTR_DTOR, 0);
+ sxe->properties = rv;
+ }
+
GET_NODE(sxe, node);
node = node->children;
while (node) {
SKIP_TEXT(node);
- _get_base_node_value(node, &value TSRMLS_CC);
+ _get_base_node_value(sxe, node, &value TSRMLS_CC);
name = (char *) node->name;
namelen = xmlStrlen(node->name) + 1;
if (sxe->xpath) {
xmlXPathFreeContext(sxe->xpath);
}
+
+ if (sxe->properties) {
+ zend_hash_destroy(sxe->properties);
+ FREE_HASHTABLE(sxe->properties);
+ }
efree(object);
}
intern->document = NULL;
intern->nsmap = NULL;
intern->xpath = NULL;
+ intern->properties = NULL;
ALLOC_HASHTABLE(intern->zo.properties);
zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0);