rrichards Mon Dec 8 12:08:19 2003 EDT Modified files: /php-src/ext/dom php_dom.c dom_iterators.c Log: fix getElementsByTagname iteration Index: php-src/ext/dom/php_dom.c diff -u php-src/ext/dom/php_dom.c:1.43 php-src/ext/dom/php_dom.c:1.44 --- php-src/ext/dom/php_dom.c:1.43 Tue Dec 2 10:17:02 2003 +++ php-src/ext/dom/php_dom.c Mon Dec 8 12:08:10 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dom.c,v 1.43 2003/12/02 15:17:02 rrichards Exp $ */ +/* $Id: php_dom.c,v 1.44 2003/12/08 17:08:10 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1092,18 +1092,20 @@ xmlNodePtr ret = NULL; while (nodep != NULL && (*cur <= index || index == -1)) { - if (nodep->type == XML_ELEMENT_NODE && xmlStrEqual(nodep->name, local)) { - if (ns == NULL || (nodep->ns != NULL && xmlStrEqual(nodep->ns->href, ns))) { - if (*cur == index) { - ret = nodep; - break; + if (nodep->type == XML_ELEMENT_NODE) { + if (xmlStrEqual(nodep->name, local)) { + if (ns == NULL || (nodep->ns != NULL && xmlStrEqual(nodep->ns->href, ns))) { + if (*cur == index) { + ret = nodep; + break; + } + (*cur)++; } - (*cur)++; } - } - ret = dom_get_elements_by_tag_name_ns_raw(nodep->children, ns, local, cur, index); - if (ret != NULL) { - break; + ret = dom_get_elements_by_tag_name_ns_raw(nodep->children, ns, local, cur, index); + if (ret != NULL) { + break; + } } nodep = nodep->next; } Index: php-src/ext/dom/dom_iterators.c diff -u php-src/ext/dom/dom_iterators.c:1.1 php-src/ext/dom/dom_iterators.c:1.2 --- php-src/ext/dom/dom_iterators.c:1.1 Sat Nov 29 15:41:41 2003 +++ php-src/ext/dom/dom_iterators.c Mon Dec 8 12:08:10 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dom_iterators.c,v 1.1 2003/11/29 20:41:41 rrichards Exp $ */ +/* $Id: dom_iterators.c,v 1.2 2003/12/08 17:08:10 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -183,11 +183,11 @@ { 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 @@ 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) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php