@@ -204,13 +204,24 @@ static xmlNodePtr dom_map_get_attr_start(xmlNodePtr node)
204204 return (xmlNodePtr ) node -> properties ;
205205}
206206
207- static void dom_map_get_chain_item (dom_nnodemap_object * map , zend_long index , zval * return_value , xmlNodePtr (* get_start )(xmlNodePtr ))
207+ static void dom_map_get_attributes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
208+ {
209+ xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
210+ xmlNodePtr itemnode = NULL ;
211+ if (nodep && index >= 0 ) {
212+ itemnode = dom_map_get_attr_start (nodep );
213+ for (; index > 0 && itemnode ; itemnode = itemnode -> next , index -- );
214+ }
215+ dom_ret_node_to_zobj (map , itemnode , return_value );
216+ }
217+
218+ static void dom_map_get_nodes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
208219{
209220 xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
210221 xmlNodePtr itemnode = NULL ;
211222 if (nodep && index >= 0 ) {
212223 dom_node_idx_pair start_point = dom_obj_map_get_start_point (map , nodep , index );
213- itemnode = start_point .node ? start_point .node : get_start (nodep );
224+ itemnode = start_point .node ? start_point .node : dom_nodelist_iter_start_first_child (nodep );
214225 for (; start_point .index > 0 && itemnode ; itemnode = itemnode -> next , start_point .index -- );
215226 }
216227 dom_ret_node_to_zobj (map , itemnode , return_value );
@@ -219,16 +230,6 @@ static void dom_map_get_chain_item(dom_nnodemap_object *map, zend_long index, zv
219230 }
220231}
221232
222- static void dom_map_get_attributes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
223- {
224- dom_map_get_chain_item (map , index , return_value , dom_map_get_attr_start );
225- }
226-
227- static void dom_map_get_nodes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
228- {
229- dom_map_get_chain_item (map , index , return_value , dom_nodelist_iter_start_first_child );
230- }
231-
232233static void dom_map_get_by_tag_name_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
233234{
234235 xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
@@ -352,7 +353,7 @@ const php_dom_obj_map_handler php_dom_obj_map_attributes = {
352353 .get_item = dom_map_get_attributes_item ,
353354 .get_named_item = dom_map_get_named_item_prop ,
354355 .has_named_item = dom_map_has_named_item_prop ,
355- .use_cache = true ,
356+ .use_cache = false ,
356357 .nameless = false,
357358};
358359
0 commit comments