chregu Mon Feb 23 10:43:49 2004 EDT Modified files: /php-src/ext/xml compat.c Log: fix attribute handling in combination with sax2 http://cvs.php.net/diff.php/php-src/ext/xml/compat.c?r1=1.28&r2=1.29&ty=u Index: php-src/ext/xml/compat.c diff -u php-src/ext/xml/compat.c:1.28 php-src/ext/xml/compat.c:1.29 --- php-src/ext/xml/compat.c:1.28 Mon Feb 23 04:19:25 2004 +++ php-src/ext/xml/compat.c Mon Feb 23 10:43:49 2004 @@ -71,13 +71,39 @@ { XML_Parser parser = (XML_Parser) user; xmlChar *qualified_name = NULL; - + xmlChar **attrs = NULL; + int i; + int z = 0; + int y = 0; + if (parser->h_start_element == NULL) { return; } _qualify_namespace(parser, name, URI, &qualified_name); - parser->h_start_element(parser->user, (const XML_Char *) qualified_name, (const XML_Char **) attributes); - + + if (attributes != NULL) { + attrs = safe_emalloc((nb_attributes * 2) + 1, sizeof(int *), 0); + xmlChar *qualified_name_attr = NULL; + + for (i = 0; i < nb_attributes; i += 1) { + attrs[z] = xmlStrdup( attributes[y]); + + if (attributes[y+1] != NULL) { + _qualify_namespace(parser, xmlStrndup(attributes[y + 3] , (int) (attributes[y + 4] - attributes[y + 3])), attributes[2], &qualified_name_attr); + } else { + qualified_name_attr = xmlStrndup(attributes[y + 3] , (int) (attributes[y + 4] - attributes[y + 3])); + } + attrs[z + 1] = qualified_name_attr; + z += 2; + y += 5; + } + + attrs[z] = NULL; + } + parser->h_start_element(parser->user, (const XML_Char *) qualified_name, (const XML_Char **) attrs); + if (attrs) { + efree(attrs); + } xmlFree(qualified_name); } #endif
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php