diff options
| author | Rob Richards <rrichards@php.net> | 2003-12-08 17:08:10 +0000 |
|---|---|---|
| committer | Rob Richards <rrichards@php.net> | 2003-12-08 17:08:10 +0000 |
| commit | 3084e72ef1053b8ead468e66baf55d5256e7e9af (patch) | |
| tree | b65fc5cfe3248eb4924fe5b66b8fd01be26e02e5 /ext/dom/dom_iterators.c | |
| parent | 862a7e589d9b4297ee7dd8d181749357b741daff (diff) | |
| download | php-git-3084e72ef1053b8ead468e66baf55d5256e7e9af.tar.gz | |
fix getElementsByTagname iteration
Diffstat (limited to 'ext/dom/dom_iterators.c')
| -rw-r--r-- | ext/dom/dom_iterators.c | 12 |
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) { |
