From: Uwe Steinmann Date: Mon, 15 Apr 2002 14:45:38 +0000 (+0000) Subject: - added DomNode->replace_child() X-Git-Tag: php-4.3.0dev-ZendEngine2-Preview1~648 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c7e391637c0942c6bf8b6df7a090765250410576;p=php - added DomNode->replace_child() --- diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c index 47bda16548..d2681a0330 100644 --- a/ext/domxml/php_domxml.c +++ b/ext/domxml/php_domxml.c @@ -326,9 +326,9 @@ static zend_function_entry php_domxmlnode_class_functions[] = { PHP_FALIAS(parent, domxml_node_parent, NULL) PHP_FALIAS(parent_node, domxml_node_parent, NULL) PHP_FALIAS(insert_before, domxml_node_insert_before, NULL) - PHP_FALIAS(append_sibling, domxml_node_append_sibling, NULL) PHP_FALIAS(append_child, domxml_node_append_child, NULL) PHP_FALIAS(remove_child, domxml_node_remove_child, NULL) + PHP_FALIAS(replace_child, domxml_node_replace_child, NULL) PHP_FALIAS(owner_document, domxml_node_owner_document, NULL) PHP_FALIAS(new_child, domxml_node_new_child, NULL) PHP_FALIAS(attributes, domxml_node_attributes, NULL) @@ -337,6 +337,7 @@ static zend_function_entry php_domxmlnode_class_functions[] = { PHP_FALIAS(clone_node, domxml_clone_node, NULL) /* Non DOM functions start here */ PHP_FALIAS(add_child, domxml_node_add_child, NULL) + PHP_FALIAS(append_sibling, domxml_node_append_sibling, NULL) PHP_FALIAS(node, domxml_node, NULL) PHP_FALIAS(unlink, domxml_node_unlink_node, NULL) PHP_FALIAS(unlink_node, domxml_node_unlink_node, NULL) @@ -2164,6 +2165,42 @@ PHP_FUNCTION(domxml_node_remove_child) } /* }}} */ +/* {{{ proto object domxml_node_replace_child(object newnode, object oldnode) + Replaces node in list of children */ +PHP_FUNCTION(domxml_node_replace_child) +{ + zval *id, *newnode, *oldnode; + xmlNodePtr children, newchild, oldchild, nodep; + int ret; + + DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep); + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oo", &newnode, &oldnode) == FAILURE) { + return; + } + + DOMXML_GET_OBJ(newchild, newnode, le_domxmlnodep); + DOMXML_GET_OBJ(oldchild, oldnode, le_domxmlnodep); + + children = nodep->children; + if (!children) { + RETURN_FALSE; + } + + while (children) { + if (children == oldchild) { + zval *rv; + xmlNodePtr node; + node = xmlReplaceNode(oldchild, newchild); + DOMXML_RET_OBJ(rv, oldchild, &ret); + return; + } + children = children->next; + } + RETURN_FALSE +} +/* }}} */ + /* {{{ proto bool domxml_node_set_name(string name) Sets name of a node */ PHP_FUNCTION(domxml_node_set_name) diff --git a/ext/domxml/php_domxml.h b/ext/domxml/php_domxml.h index 8da31fdc36..f09fa07c4b 100644 --- a/ext/domxml/php_domxml.h +++ b/ext/domxml/php_domxml.h @@ -111,6 +111,7 @@ PHP_FUNCTION(domxml_node_insert_before); PHP_FUNCTION(domxml_node_append_sibling); PHP_FUNCTION(domxml_node_append_child); PHP_FUNCTION(domxml_node_remove_child); +PHP_FUNCTION(domxml_node_replace_child); PHP_FUNCTION(domxml_node_add_child); PHP_FUNCTION(domxml_node_has_attributes); PHP_FUNCTION(domxml_node_has_child_nodes);