]> granicus.if.org Git - php/commitdiff
Added DOMNode::getNodePath() for getting an XPath for a node.
authorChristian Stocker <chregu@php.net>
Sun, 16 Jul 2006 15:03:53 +0000 (15:03 +0000)
committerChristian Stocker <chregu@php.net>
Sun, 16 Jul 2006 15:03:53 +0000 (15:03 +0000)
NEWS
ext/dom/dom_fe.h
ext/dom/node.c

diff --git a/NEWS b/NEWS
index 058630ec5b0cd8849ddc3bd9e3012c0b7f104ce6..4f89ff8b96bf1f09c1a1f716d2ddccb42baf5f61 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -77,6 +77,7 @@ PHP                                                                        NEWS
 - Added pg_field_table() function. (Edin)
 - Added SimpleXMLElement::saveXML() as an alias for SimpleXMLElement::asXML().
   (Hannes)
+- Added DOMNode::getNodePath() for getting an XPath for a node. (Christian)
 
 - Optimized zend_try/zend_catch macros by eliminating memcpy(3). (Dmitry)
 - Optimized require_once() and include_once() by eliminating fopen(3)
index 111f9e25f307fac3afce405fd727246a2a9daab7..467fc323fd49ad25f00e075f13d991a61eeb228c 100644 (file)
@@ -167,6 +167,7 @@ PHP_FUNCTION(dom_node_set_user_data);
 PHP_FUNCTION(dom_node_get_user_data);
 PHP_METHOD(domnode, C14N);
 PHP_METHOD(domnode, C14NFile);
+PHP_METHOD(domnode, getNodePath);
 
 /* domnodelist methods */
 PHP_FUNCTION(dom_nodelist_item);
index 62073ad4d978a465af833384c38c3a58f49cddd9..5ae4827901642df2102e5169f7bb36188d13c168 100644 (file)
@@ -53,6 +53,7 @@ zend_function_entry php_dom_node_class_functions[] = {
        PHP_FALIAS(getFeature, dom_node_get_feature, NULL)
        PHP_FALIAS(setUserData, dom_node_set_user_data, NULL)
        PHP_FALIAS(getUserData, dom_node_get_user_data, NULL)
+       PHP_ME(domnode, getNodePath, NULL, ZEND_ACC_PUBLIC)
        PHP_ME(domnode, C14N, NULL, ZEND_ACC_PUBLIC)
        PHP_ME(domnode, C14NFile, NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
@@ -1857,3 +1858,32 @@ PHP_METHOD(domnode, C14NFile)
 }
 
 #endif
+
+/* {{{ proto int DOMNode::getNodePath()
+   Gets an xpath for a node */
+
+PHP_METHOD(domnode, getNodePath)
+{
+       zval *id;
+       xmlNode *nodep;
+       dom_object *intern;
+       char *value;
+       
+
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) {
+               return;
+       }
+
+       DOM_GET_OBJ(nodep, id, xmlNodePtr, intern);
+
+       value = xmlGetNodePath(nodep);
+       if (value == NULL) {
+               RETURN_EMPTY_STRING();
+       } else {
+               RETVAL_STRING(value, 1);
+               xmlFree(value);
+       }
+
+       
+}
+