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

Reply via email to