0); foreach ($xml_values as $data) { switch($data['type']) { case 'open': $last_counter_in_tag[$data['level']+1] = 0; $new_tag = array('name' => $data['tag']); if(isset($data['attributes'])) $new_tag['attributes'] = $data['attributes']; if(isset($data['value']) && trim($data['value'])) $new_tag['value'] = trim($data['value']); $last_tag_ar[$last_counter_in_tag[$data['level']]] = $new_tag; $parents[$data['level']] =& $last_tag_ar; $last_tag_ar =& $last_tag_ar[$last_counter_in_tag[$data['level']]++]; break; case 'complete': $new_tag = array('name' => $data['tag']); if(isset($data['attributes'])) $new_tag['attributes'] = $data['attributes']; if(isset($data['value']) && trim($data['value'])) $new_tag['value'] = trim($data['value']); $last_count = count($last_tag_ar)-1; $last_tag_ar[$last_counter_in_tag[$data['level']]++] = $new_tag; break; case 'close': $last_tag_ar =& $parents[$data['level']]; break; default: break; }; } $result = $xml_array; } return $result; } public function getValueByPath($xml_array, $tagPath) { $tmp_arr =& $xml_array; $tag_path = explode('/', $tagPath); foreach($tag_path as $tag_name) { $res = false; foreach($tmp_arr as $key => $node) { if(is_int($key) && $node['name'] == $tag_name) { $tmp_arr = $node; $res = true; break; } } if(!$res) return false; } return $tmp_arr; } public function renameFile ($path, $input) { $result = rename ($path . $input .".xml", $path . $input .".txt"); return $result; } } // $arr = xml2array('test.xml'); // print_r(getValueByPath($arr, 'tag/sub_tag/sub_sub_tag'));