/** * * обработка xml xsl'ем * @param str $xsl_file * @param str $root_node_name * @param array,str,c_xml $dta - можно передать массив (тогда обязательно задать $root_node_name), строку с xml-данными, c_xml * @param bool $is_debug * @param array $params * @param array $keys_as_params * @param bool $kill_doctype */ function xsl_out($xsl_file, $root_node_name, $dta = array(), $is_debug = false, $params = array(), $keys_as_params = array(), $kill_doctype = true) { global $o_global; if (!isset($params['res_site_url'])) { $params['res_site_url'] = $o_global->res_site_url; } if (!isset($params['res_engine_url'])) { $params['res_engine_url'] = $o_global->res_engine_url; } if (!isset($params['current_url'])) { $params['current_url'] = $o_global->current_url; } if (is_object($dta)) { $xml = $dta->toXML(); } elseif (is_array($dta)) { $xml = c_xml::arrayToXML($root_node_name, $dta); } else { $xml = $dta; } $res = ''; if ($is_debug || $_REQUEST['debug_xsl'] > 0 && _GL_DEBUG === true || $_REQUEST['debug_xsl'] === $xsl_file && _GL_DEBUG === true) { $_REQUEST['debug_xsl'] = $_REQUEST['debug_xsl'] - 1; //можно дебажить до определённого уровня $res .= '<B>File: "' . $xsl_file . '"</B><BR/>'; if (!empty($params)) { $res .= '<U>Params</U>:<BR>'; foreach ($params as $k => $v) { $res .= "<B>{$k}</B>={$v}<BR>"; } } $res .= c_xml::dump($xml); $save_to = _PMP_ROOT . '/tmp/xml_dump.xml'; $fp = @fopen($save_to, 'w'); if ($fp !== false) { @fwrite($fp, $xml); } @fclose($fp); } $res .= c_xml::transform($xsl_file, $xml, $params); if ($kill_doctype) { $res = preg_replace("/^\\<!DOCTYPE.*\\.dtd\"\\>/i", '', $res, 1); } return $res; }