summaryrefslogtreecommitdiff
path: root/ext/dom/dom_iterators.c
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2003-12-08 17:08:10 +0000
committerRob Richards <rrichards@php.net>2003-12-08 17:08:10 +0000
commit3084e72ef1053b8ead468e66baf55d5256e7e9af (patch)
treeb65fc5cfe3248eb4924fe5b66b8fd01be26e02e5 /ext/dom/dom_iterators.c
parent862a7e589d9b4297ee7dd8d181749357b741daff (diff)
downloadphp-git-3084e72ef1053b8ead468e66baf55d5256e7e9af.tar.gz
fix getElementsByTagname iteration
Diffstat (limited to 'ext/dom/dom_iterators.c')
-rw-r--r--ext/dom/dom_iterators.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index 5f1e005c5f..fe53135996 100644
--- a/ext/dom/dom_iterators.c
+++ b/ext/dom/dom_iterators.c
@@ -183,11 +183,11 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
{
zval *curobj, *curattr = NULL;
zval *object;
- xmlNodePtr curnode = NULL;
+ xmlNodePtr curnode = NULL, basenode;
dom_object *intern;
dom_object *nnmap;
dom_nnodemap_object *objmap;
- int ret, previndex=0;
+ int ret, previndex=1;
php_dom_iterator *iterator = (php_dom_iterator *)iter;
@@ -203,8 +203,12 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
curnode = curnode->next;
} else {
- previndex = iter->index - 1;
- curnode = dom_get_elements_by_tag_name_ns_raw(curnode, objmap->ns, objmap->local, &previndex, iter->index);
+ /* Nav the tree evey time as this is LIVE */
+ basenode = dom_object_get_node(objmap->baseobj);
+ if (basenode && (basenode->type == XML_DOCUMENT_NODE || basenode->type == XML_HTML_DOCUMENT_NODE)) {
+ basenode = xmlDocGetRootElement((xmlDoc *) basenode);
+ }
+ curnode = dom_get_elements_by_tag_name_ns_raw(basenode, objmap->ns, objmap->local, &previndex, iter->index);
}
} else {
if (objmap->nodetype == XML_ENTITY_NODE) {