summaryrefslogtreecommitdiff
path: root/ext/xmlreader/php_xmlreader.c
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2004-07-22 15:50:44 +0000
committerRob Richards <rrichards@php.net>2004-07-22 15:50:44 +0000
commit950f950ecdf830162dff0e63d18a763f23297af0 (patch)
treef04ca49467d5c6e8cbb11731a00263a167556093 /ext/xmlreader/php_xmlreader.c
parentbb23e0d7cc23daaca7f3bcb6d34ca591e0039019 (diff)
downloadphp-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.c26
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;