Небольшой класс для работы с 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;
}
}