Небольшой класс для работы с XSLT. Пример использования:


    $o_xslt = new Xslt();
    $o_xslt->xslt_file='any_xslt_file.xsl';
    $o_xslt->transform($xml_string);

    

Исходник:


/**
 * Преобразования XML->XSLT->HTML или еще что-нибудь
 */
class Xslt
{
    public $path = "./template"; // путь к папке с шаблонами
    public $xslt = "/document.xsl"; // путь к конкретному xslt
    /**
     * Получает строку с xml и преобразует ее используя xslt файл (php5)
     */
    function transform($s_xml)
    {
        $s_xml='<?xml version="1.0" encoding="utf-8" ?>'.$s_xml; // <- encode decode problem in url
        $xml = DOMDocument::loadXML($s_xml);

        $xsl = new DOMDocument;
        $xsl->load($this->path.$this->xslt);

        // Configure the transformer
        $proc = new XSLTProcessor;
        $proc->importStyleSheet($xsl); // attach the xsl rules

        echo $proc->transformToXML($xml);
    }
    /**
     * Получает строку с xml и преобразует ее используя xslt файл (php4)
     */
    function transform_php4($s_xml)
    {
        //open xsl file
        $filename = $this->path.$this->xslt;
        $handle = fopen($filename, 'r');
        $xsl = fread($handle, filesize($filename));
        fclose($handle);
        
        // set arguments
        $arguments = array(
            '/_xml' => $xml,
            '/_xsl' => $xsl
        );

        // make parser
        $xh = xslt_create();

        // file base for win32
        $file_base = 'file://' . getcwd () . '/';
        xslt_set_base($xh,$file_base);        
        
        $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);  
        xslt_free($xh);
        
        // xslt output
        echo $result;
    }
}