За последние 24 часа нас посетил 16471 программист и 1567 роботов. Сейчас ищут 914 программистов ...

Вывод XSLT-процессора ... Помогите разобраться ...

Тема в разделе "Прочие вопросы по PHP", создана пользователем bogong, 25 янв 2012.

  1. bogong

    bogong Активный пользователь

    С нами с:
    20 май 2010
    Сообщения:
    114
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Есть код PHP:
    Код (Text):
    1.  
    2. header("Content-type: text/html; charset=utf-8");
    3.  
    4. $xmlDoc='index.xml';
    5. $xslDoc='index.xsl';
    6.  
    7. class testClass{
    8.     function testClassFoo(){
    9.         $arr=array('test1','test2','test3','test4');
    10.         $output='<ul>';
    11.         foreach ($arr as $key=>$val){
    12.             $output.='<li><a href="index.php?id='.$key.'">'.$val.'</a></li>';
    13.         }
    14.         $output.='</ul>';
    15.         return $output;
    16.     }
    17. }
    18.  
    19. function test() {
    20.     $test=new testClass;
    21.     return $test->testClassFoo();
    22. }
    23.  
    24. function test1() {
    25.     return 'Test1<br>';
    26. }
    27.  
    28.  
    29. $xml=new DOMDocument;
    30. $xml->load($xmlDoc);
    31. $xsl=new DOMDocument;
    32. $xsl->load($xslDoc);
    33. $proc=new XSLTProcessor;
    34. $proc->registerPHPFunctions();
    35. $proc->importStylesheet($xsl);
    36.  
    37. echo $proc->transformToXml($xml);
    38.  
    39.  
    40. ?>
    Есть XSLT:
    Код (Text):
    1.  
    2. <?xml version="1.0" encoding="UTF-8"?>
    3.  
    4. <xsl:stylesheet
    5.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    6.     xmlns:php="http://php.net/xsl"
    7.     xmlns:usr="testNameXslt">
    8.     <xsl:output method="html"/>
    9.  
    10.     <xsl:template match="/">
    11.         <html>
    12.             <head>
    13.                 <title><xsl:value-of select="string(/page/title[1])"/></title>
    14.             </head>
    15.             <body>
    16.                 <xsl:value-of select="php:function('test')"/>
    17.             </body>
    18.         </html>
    19.     </xsl:template>
    20. </xsl:stylesheet>
    Вопрос как заставить XSLT процессор выводить HTML без перевода в спецсимволы??? Если меняю c $output на echo выводит все нормально , но не в том месте где нужно (с этим вроде помогли разобраться) ... Если через return $output - то переводит все скобки с "<" в "&lt;" ... Хочется получить на выходе нормальный HTML и в нужном месте документа ...

    Основная моя задача сделать html на основе структуры xml c xslt-преобразованиями ... и вывалить его в html посетителю через php ...
     
  2. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Может глянь в сторону disable-output-escaping?
    Код (Text):
    1. <xsl:value-of select="expression" disable-output-escaping="yes|no" />
     
  3. bogong

    bogong Активный пользователь

    С нами с:
    20 май 2010
    Сообщения:
    114
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Благодарю ... Глянул ... Заработало :))) Но обнаружилось что у PHP есть глюк на эту тему ... Только после 5.3 это нормально работает ... Пришлось поставить PHP 5.3.9. В версиях ниже 5.3 может встречаться то что 'disable-output-escaping="yes"' может просто игнорироваться процессором XSLT в PHP ... По какой причине - разбираться не стал ... Просто обновил ...

    В XSLT нужно поставить вот это дополнение:
    Код (Text):
    1.  
    2. <?xml version="1.0" encoding="UTF-8"?>
    3.  
    4. <xsl:stylesheet
    5.    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    6.    xmlns:php="http://php.net/xsl"
    7.    xmlns:usr="testNameXslt">
    8.    <xsl:output method="html"/>
    9.  
    10.    <xsl:template match="/">
    11.       <html>
    12.          <head>
    13.             <title><xsl:value-of select="string(/page/title[1])"/></title>
    14.          </head>
    15.          <body>
    16.             <xsl:value-of select="php:function('test')" disable-output-escaping="yes"/>
    17.          </body>
    18.       </html>
    19.    </xsl:template>
    20. </xsl:stylesheet>