@@ -266,6 +266,16 @@ static void dom_map_get_elements_item(dom_nnodemap_object *map, zend_long index,
266266 }
267267}
268268
269+ static void dom_map_collection_named_item_elements_iter (dom_nnodemap_object * map , php_dom_obj_map_collection_iter * iter )
270+ {
271+ if (iter -> candidate != iter -> basep -> children ) {
272+ iter -> candidate = iter -> candidate -> next ;
273+ }
274+ while (iter -> candidate && iter -> candidate -> type != XML_ELEMENT_NODE ) {
275+ iter -> candidate = iter -> candidate -> next ;
276+ }
277+ }
278+
269279static void dom_map_get_by_tag_name_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
270280{
271281 xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
@@ -282,6 +292,12 @@ static void dom_map_get_by_tag_name_item(dom_nnodemap_object *map, zend_long ind
282292 }
283293}
284294
295+ static void dom_map_collection_named_item_by_tag_name_iter (dom_nnodemap_object * map , php_dom_obj_map_collection_iter * iter )
296+ {
297+ iter -> candidate = dom_get_elements_by_tag_name_ns_raw (iter -> basep , iter -> candidate , map -> ns , map -> local , map -> local_lower , & iter -> cur , iter -> next );
298+ iter -> next = iter -> cur + 1 ;
299+ }
300+
285301static void dom_map_get_null_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
286302{
287303 RETURN_NULL ();
@@ -450,6 +466,7 @@ const php_dom_obj_map_handler php_dom_obj_map_attributes = {
450466 .get_item = dom_map_get_attributes_item ,
451467 .get_ns_named_item = dom_map_get_ns_named_item_prop ,
452468 .has_ns_named_item = dom_map_has_ns_named_item_prop ,
469+ .collection_named_item_iter = NULL ,
453470 .use_cache = false,
454471 .nameless = false,
455472};
@@ -459,6 +476,7 @@ const php_dom_obj_map_handler php_dom_obj_map_by_tag_name = {
459476 .get_item = dom_map_get_by_tag_name_item ,
460477 .get_ns_named_item = dom_map_get_ns_named_item_null ,
461478 .has_ns_named_item = dom_map_has_ns_named_item_null ,
479+ .collection_named_item_iter = dom_map_collection_named_item_by_tag_name_iter ,
462480 .use_cache = true,
463481 .nameless = true,
464482};
@@ -468,6 +486,7 @@ const php_dom_obj_map_handler php_dom_obj_map_child_nodes = {
468486 .get_item = dom_map_get_nodes_item ,
469487 .get_ns_named_item = dom_map_get_ns_named_item_null ,
470488 .has_ns_named_item = dom_map_has_ns_named_item_null ,
489+ .collection_named_item_iter = NULL ,
471490 .use_cache = true,
472491 .nameless = true,
473492};
@@ -477,6 +496,7 @@ const php_dom_obj_map_handler php_dom_obj_map_nodeset = {
477496 .get_item = dom_map_get_nodeset_item ,
478497 .get_ns_named_item = dom_map_get_ns_named_item_null ,
479498 .has_ns_named_item = dom_map_has_ns_named_item_null ,
499+ .collection_named_item_iter = NULL ,
480500 .use_cache = false,
481501 .nameless = true,
482502};
@@ -486,6 +506,7 @@ const php_dom_obj_map_handler php_dom_obj_map_entities = {
486506 .get_item = dom_map_get_entity_item ,
487507 .get_ns_named_item = dom_map_get_ns_named_item_entity ,
488508 .has_ns_named_item = dom_map_has_ns_named_item_xmlht ,
509+ .collection_named_item_iter = NULL ,
489510 .use_cache = false,
490511 .nameless = false,
491512};
@@ -495,6 +516,7 @@ const php_dom_obj_map_handler php_dom_obj_map_notations = {
495516 .get_item = dom_map_get_notation_item ,
496517 .get_ns_named_item = dom_map_get_ns_named_item_notation ,
497518 .has_ns_named_item = dom_map_has_ns_named_item_xmlht ,
519+ .collection_named_item_iter = NULL ,
498520 .use_cache = false,
499521 .nameless = false,
500522};
@@ -504,6 +526,7 @@ const php_dom_obj_map_handler php_dom_obj_map_child_elements = {
504526 .get_item = dom_map_get_elements_item ,
505527 .get_ns_named_item = dom_map_get_ns_named_item_null ,
506528 .has_ns_named_item = dom_map_has_ns_named_item_null ,
529+ .collection_named_item_iter = dom_map_collection_named_item_elements_iter ,
507530 .use_cache = true,
508531 .nameless = true,
509532};
@@ -513,6 +536,7 @@ const php_dom_obj_map_handler php_dom_obj_map_noop = {
513536 .get_item = dom_map_get_null_item ,
514537 .get_ns_named_item = dom_map_get_ns_named_item_null ,
515538 .has_ns_named_item = dom_map_has_ns_named_item_null ,
539+ .collection_named_item_iter = NULL ,
516540 .use_cache = false,
517541 .nameless = true,
518542};
0 commit comments