summaryrefslogtreecommitdiff
path: root/ext/dom/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/node.c')
-rw-r--r--ext/dom/node.c52
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;
}