diff options
Diffstat (limited to 'ext/dom/node.c')
| -rw-r--r-- | ext/dom/node.c | 52 |
1 files changed, 9 insertions, 43 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c index fc146051d5..e638ec003f 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -27,7 +27,6 @@ #if HAVE_LIBXML && HAVE_DOM #include "php_dom.h" - /* * class domnode * @@ -280,31 +279,13 @@ Since: */ int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC) { - xmlNodePtr nodep, last; - int ret; - - nodep = dom_object_get_node(obj); + dom_object *intern; - if (dom_node_children_valid(nodep) == SUCCESS) { - if ((nodep->type == XML_DOCUMENT_NODE) || (nodep->type == XML_HTML_DOCUMENT_NODE)) { - last = ((xmlDoc *) nodep)->children; - } else { - last = nodep->children; - } - } else { - last = NULL; - } + ALLOC_ZVAL(*retval); + php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC); - MAKE_STD_ZVAL(*retval); - array_init(*retval); - - while (last) { - zval *child; - MAKE_STD_ZVAL(child); - child = php_dom_create_object(last, &ret, NULL, child, obj TSRMLS_CC); - add_next_index_zval(*retval, child); - last = last->next; - } + intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); + dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL); return SUCCESS; } @@ -446,28 +427,13 @@ Since: */ int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC) { - xmlNodePtr nodep; - xmlAttr *attr; - int ret; - - nodep = dom_object_get_node(obj); + dom_object *intern; ALLOC_ZVAL(*retval); + php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); - if (nodep->type == XML_ELEMENT_NODE) { - attr = nodep->properties; - array_init(*retval); - - while (attr) { - zval *curattr; - MAKE_STD_ZVAL(curattr); - curattr = php_dom_create_object((xmlNodePtr) attr, &ret, NULL, curattr, obj TSRMLS_CC); - add_assoc_zval(*retval, (char *) attr->name, curattr); - attr = attr->next; - } - } else { - ZVAL_NULL(*retval); - } + intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); + dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL); return SUCCESS; } |
