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