@@ -196,19 +196,25 @@ static void dom_map_cache_obj(dom_nnodemap_object *map, xmlNodePtr itemnode, zen
196
196
map -> cached_obj = cached_obj ;
197
197
}
198
198
199
- static xmlNodePtr dom_map_get_attr_start ( xmlNodePtr node )
199
+ static void dom_map_get_attributes_item ( dom_nnodemap_object * map , zend_long index , zval * return_value )
200
200
{
201
- ZEND_ASSERT (node -> type == XML_ELEMENT_NODE );
202
- return (xmlNodePtr ) node -> properties ;
201
+ xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
202
+ xmlNodePtr itemnode = NULL ;
203
+ if (nodep && index >= 0 ) {
204
+ ZEND_ASSERT (nodep -> type == XML_ELEMENT_NODE );
205
+ itemnode = (xmlNodePtr ) nodep -> properties ;
206
+ for (; index > 0 && itemnode ; itemnode = itemnode -> next , index -- );
207
+ }
208
+ dom_ret_node_to_zobj (map , itemnode , return_value );
203
209
}
204
210
205
- static void dom_map_get_chain_item (dom_nnodemap_object * map , zend_long index , zval * return_value , xmlNodePtr ( * get_start )( xmlNodePtr ) )
211
+ static void dom_map_get_nodes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
206
212
{
207
213
xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
208
214
xmlNodePtr itemnode = NULL ;
209
215
if (nodep && index >= 0 ) {
210
216
dom_node_idx_pair start_point = dom_obj_map_get_start_point (map , nodep , index );
211
- itemnode = start_point .node ? start_point .node : get_start (nodep );
217
+ itemnode = start_point .node ? start_point .node : dom_nodelist_iter_start_first_child (nodep );
212
218
for (; start_point .index > 0 && itemnode ; itemnode = itemnode -> next , start_point .index -- );
213
219
}
214
220
dom_ret_node_to_zobj (map , itemnode , return_value );
@@ -217,16 +223,6 @@ static void dom_map_get_chain_item(dom_nnodemap_object *map, zend_long index, zv
217
223
}
218
224
}
219
225
220
- static void dom_map_get_attributes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
221
- {
222
- dom_map_get_chain_item (map , index , return_value , dom_map_get_attr_start );
223
- }
224
-
225
- static void dom_map_get_nodes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
226
- {
227
- dom_map_get_chain_item (map , index , return_value , dom_nodelist_iter_start_first_child );
228
- }
229
-
230
226
static void dom_map_get_by_tag_name_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
231
227
{
232
228
xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
@@ -411,7 +407,7 @@ const php_dom_obj_map_handler php_dom_obj_map_attributes = {
411
407
.get_item = dom_map_get_attributes_item ,
412
408
.get_named_item = dom_map_get_named_item_prop ,
413
409
.has_named_item = dom_map_has_named_item_prop ,
414
- .use_cache = true ,
410
+ .use_cache = false ,
415
411
.nameless = false,
416
412
};
417
413
0 commit comments