diff options
| author | Rob Richards <rrichards@php.net> | 2004-07-22 15:50:44 +0000 | 
|---|---|---|
| committer | Rob Richards <rrichards@php.net> | 2004-07-22 15:50:44 +0000 | 
| commit | 950f950ecdf830162dff0e63d18a763f23297af0 (patch) | |
| tree | f04ca49467d5c6e8cbb11731a00263a167556093 /ext/xmlreader/php_xmlreader.c | |
| parent | bb23e0d7cc23daaca7f3bcb6d34ca591e0039019 (diff) | |
| download | php-git-950f950ecdf830162dff0e63d18a763f23297af0.tar.gz | |
add optional name parameter to next()
  move to next named sibling skipping subtrees
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
| -rw-r--r-- | ext/xmlreader/php_xmlreader.c | 26 | 
1 files changed, 24 insertions, 2 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 2c9b5b8355..11cb6110ca 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -760,18 +760,40 @@ PHP_METHOD(xmlreader, read)  }  /* }}} */ -/* {{{ proto boolean read() +/* {{{ proto boolean next([string localname])  Moves the position of the current instance to the next node in the stream. */  PHP_METHOD(xmlreader, next)  {  	zval *id; -	int retval; +	int retval, name_len=0;  	xmlreader_object *intern; +	char *name = NULL; + +	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { +		return; +	}  	id = getThis();  	intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);  	if (intern != NULL && intern->ptr != NULL) {  		retval = xmlTextReaderNext(intern->ptr); +		while (name != NULL && retval == 1) { +#ifdef PHP_WIN32 +			/* xmlTextReaderConstLocalName should be used once its added to win def libxml.def file. +			Doing so will not require localname to be freed as its not allocated */ +			xmlChar *localname = xmlTextReaderLocalName(intern->ptr); +			if (xmlStrEqual(localname, name)) { +				xmlFree(localname); +				RETURN_TRUE; +			} +			xmlFree(localname); +#else +			if (xmlStrEqual(xmlTextReaderConstLocalName(intern->ptr), name)) { +				RETURN_TRUE; +			} +#endif +			retval = xmlTextReaderNext(intern->ptr);  +		}  		if (retval == -1) {  			php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occured while reading");  			RETURN_FALSE;  | 
