@@ -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 ();
@@ -447,6 +463,7 @@ const php_dom_obj_map_handler php_dom_obj_map_attributes = {
447463 .get_item = dom_map_get_attributes_item ,
448464 .get_ns_named_item = dom_map_get_ns_named_item_prop ,
449465 .has_ns_named_item = dom_map_has_ns_named_item_prop ,
466+ .collection_named_item_iter = NULL ,
450467 .use_cache = false,
451468 .nameless = false,
452469};
@@ -456,6 +473,7 @@ const php_dom_obj_map_handler php_dom_obj_map_by_tag_name = {
456473 .get_item = dom_map_get_by_tag_name_item ,
457474 .get_ns_named_item = dom_map_get_ns_named_item_null ,
458475 .has_ns_named_item = dom_map_has_ns_named_item_null ,
476+ .collection_named_item_iter = dom_map_collection_named_item_by_tag_name_iter ,
459477 .use_cache = true,
460478 .nameless = true,
461479};
@@ -465,6 +483,7 @@ const php_dom_obj_map_handler php_dom_obj_map_child_nodes = {
465483 .get_item = dom_map_get_nodes_item ,
466484 .get_ns_named_item = dom_map_get_ns_named_item_null ,
467485 .has_ns_named_item = dom_map_has_ns_named_item_null ,
486+ .collection_named_item_iter = NULL ,
468487 .use_cache = true,
469488 .nameless = true,
470489};
@@ -474,6 +493,7 @@ const php_dom_obj_map_handler php_dom_obj_map_nodeset = {
474493 .get_item = dom_map_get_nodeset_item ,
475494 .get_ns_named_item = dom_map_get_ns_named_item_null ,
476495 .has_ns_named_item = dom_map_has_ns_named_item_null ,
496+ .collection_named_item_iter = NULL ,
477497 .use_cache = false,
478498 .nameless = true,
479499};
@@ -483,6 +503,7 @@ const php_dom_obj_map_handler php_dom_obj_map_entities = {
483503 .get_item = dom_map_get_entity_item ,
484504 .get_ns_named_item = dom_map_get_ns_named_item_entity ,
485505 .has_ns_named_item = dom_map_has_ns_named_item_xmlht ,
506+ .collection_named_item_iter = NULL ,
486507 .use_cache = false,
487508 .nameless = false,
488509};
@@ -492,6 +513,7 @@ const php_dom_obj_map_handler php_dom_obj_map_notations = {
492513 .get_item = dom_map_get_notation_item ,
493514 .get_ns_named_item = dom_map_get_ns_named_item_notation ,
494515 .has_ns_named_item = dom_map_has_ns_named_item_xmlht ,
516+ .collection_named_item_iter = NULL ,
495517 .use_cache = false,
496518 .nameless = false,
497519};
@@ -501,6 +523,7 @@ const php_dom_obj_map_handler php_dom_obj_map_child_elements = {
501523 .get_item = dom_map_get_elements_item ,
502524 .get_ns_named_item = dom_map_get_ns_named_item_null ,
503525 .has_ns_named_item = dom_map_has_ns_named_item_null ,
526+ .collection_named_item_iter = dom_map_collection_named_item_elements_iter ,
504527 .use_cache = true,
505528 .nameless = true,
506529};
@@ -510,6 +533,7 @@ const php_dom_obj_map_handler php_dom_obj_map_noop = {
510533 .get_item = dom_map_get_null_item ,
511534 .get_ns_named_item = dom_map_get_ns_named_item_null ,
512535 .has_ns_named_item = dom_map_has_ns_named_item_null ,
536+ .collection_named_item_iter = NULL ,
513537 .use_cache = false,
514538 .nameless = true,
515539};
0 commit comments