diff options
author | Joey Smith <joey@php.net> | 2001-08-09 12:35:09 +0000 |
---|---|---|
committer | Joey Smith <joey@php.net> | 2001-08-09 12:35:09 +0000 |
commit | f8d73072709bb26dba3b160f4ac549bbc2bcbf70 (patch) | |
tree | 0301c95b2af22a71d02e1fcce98ee2564b2a0687 /ext/domxml | |
parent | 00418457d3cb37ede25f146e31b29f66799d410c (diff) | |
download | php-git-f8d73072709bb26dba3b160f4ac549bbc2bcbf70.tar.gz |
Commit acutal code only, will do ws on another pass.
Diffstat (limited to 'ext/domxml')
-rw-r--r-- | ext/domxml/php_domxml.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c index 41cbfb6df6..db27310d5f 100644 --- a/ext/domxml/php_domxml.c +++ b/ext/domxml/php_domxml.c @@ -102,13 +102,13 @@ static zend_function_entry domxml_functions[] = { PHP_FE(domxml_new_xmldoc, NULL) PHP_FALIAS(new_xmldoc, domxml_new_xmldoc, NULL) #if defined(LIBXML_XPATH_ENABLED) -/* PHP_FE(xpath_new_context, NULL) + PHP_FE(xpath_new_context, NULL) PHP_FE(xpath_eval, NULL) - PHP_FE(xpath_eval_expression, NULL) */ + PHP_FE(xpath_eval_expression, NULL) #endif #if defined(LIBXML_XPTR_ENABLED) -/* PHP_FE(xptr_new_context, NULL) - PHP_FE(xptr_eval, NULL) */ + PHP_FE(xptr_new_context, NULL) + PHP_FE(xptr_eval, NULL) #endif {NULL, NULL, NULL} }; @@ -2477,20 +2477,49 @@ PHP_FUNCTION(xptr_new_context) } /* }}} */ +/* {{{ */ static void php_xpathptr_eval(INTERNAL_FUNCTION_PARAMETERS, int mode, int expr) { - zval *id, *str, *rv; + zval *id, *str, *rv, *contextnode; xmlXPathContextPtr ctxp; xmlXPathObjectPtr xpathobjp; + xmlNode *contextnodep; int ret; - if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &str) == FAILURE) { - WRONG_PARAM_COUNT; - } + contextnode = NULL; + contextnodep = NULL; id = getThis(); + + if (! id) { + switch(ZEND_NUM_ARGS()) { + case 2: + if ((getParameters(ht, 2, &id, &str)) == FAILURE) + { + WRONG_PARAM_COUNT; + } + break; + + case 3: + if ((getParameters(ht, 3, &id, &str, &contextnode)) == FAILURE) + { + WRONG_PARAM_COUNT; + } + break; + + default: + WRONG_PARAM_COUNT; + } + } + + ctxp = php_xpath_get_context(id, le_xpathctxp, 0 TSRMLS_CC); convert_to_string(str); + + if (contextnode) { + contextnodep = php_dom_get_object(contextnode, le_domxmlnodep, 0); + } + ctxp->node = contextnodep; #if defined(LIBXML_XPTR_ENABLED) if(mode == PHP_XPTR) { @@ -2504,7 +2533,8 @@ static void php_xpathptr_eval(INTERNAL_FUNCTION_PARAMETERS, int mode, int expr) #if defined(LIBXML_XPTR_ENABLED) } #endif - + + ctxp->node = NULL; if (!xpathobjp) { RETURN_FALSE; } |