Есть код PHP: Код (Text): header("Content-type: text/html; charset=utf-8"); $xmlDoc='index.xml'; $xslDoc='index.xsl'; class testClass{ function testClassFoo(){ $arr=array('test1','test2','test3','test4'); $output='<ul>'; foreach ($arr as $key=>$val){ $output.='<li><a href="index.php?id='.$key.'">'.$val.'</a></li>'; } $output.='</ul>'; return $output; } } function test() { $test=new testClass; return $test->testClassFoo(); } function test1() { return 'Test1<br>'; } $xml=new DOMDocument; $xml->load($xmlDoc); $xsl=new DOMDocument; $xsl->load($xslDoc); $proc=new XSLTProcessor; $proc->registerPHPFunctions(); $proc->importStylesheet($xsl); echo $proc->transformToXml($xml); ?> Есть XSLT: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:php="http://php.net/xsl" xmlns:usr="testNameXslt"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="string(/page/title[1])"/></title> </head> <body> <xsl:value-of select="php:function('test')"/> </body> </html> </xsl:template> </xsl:stylesheet> Вопрос как заставить XSLT процессор выводить HTML без перевода в спецсимволы??? Если меняю c $output на echo выводит все нормально , но не в том месте где нужно (с этим вроде помогли разобраться) ... Если через return $output - то переводит все скобки с "<" в "<" ... Хочется получить на выходе нормальный HTML и в нужном месте документа ... Основная моя задача сделать html на основе структуры xml c xslt-преобразованиями ... и вывалить его в html посетителю через php ...
Может глянь в сторону disable-output-escaping? Код (Text): <xsl:value-of select="expression" disable-output-escaping="yes|no" />
Благодарю ... Глянул ... Заработало )) Но обнаружилось что у PHP есть глюк на эту тему ... Только после 5.3 это нормально работает ... Пришлось поставить PHP 5.3.9. В версиях ниже 5.3 может встречаться то что 'disable-output-escaping="yes"' может просто игнорироваться процессором XSLT в PHP ... По какой причине - разбираться не стал ... Просто обновил ... В XSLT нужно поставить вот это дополнение: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:php="http://php.net/xsl" xmlns:usr="testNameXslt"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title><xsl:value-of select="string(/page/title[1])"/></title> </head> <body> <xsl:value-of select="php:function('test')" disable-output-escaping="yes"/> </body> </html> </xsl:template> </xsl:stylesheet>