Как написать PHP в XSLT - PullRequest
0 голосов
/ 04 мая 2020

Я очень долго пытался написать простой php оператор echo в файле .xsl, но каждый сайт, на который я смотрю, кажется, не работает для меня, когда я ввожу тег инструкции обработки. Я даже попытался изменить пространство имен для php, и я не уверен, почему мой код не выводит оператор echo. Вот мой файл .xsl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:php="http://php.net/xsl"
    exclude-result-prefixes="php" version="1.0">
    <xsl:output omit-xml-declaration="yes" method="html" />
    <xsl:template match="/">
        <html> 
            <head>
            </head>
            <body bgcolor="#000">
                    <div class="main" style="background:lightblue;">
                        <xsl:processing-instruction name="php">
                        echo 'OK IT DOESN't WORK!!!!!!!!!!!!!!!!!!!';
                        </xsl:processing-instruction>
                        <xsl:for-each select="webpage/content/main">
                            <a href="{link}" style="color:#000; text-decoration:none;">
                                <h1><xsl:value-of select="heading" /></h1>
                                <h2><xsl:value-of select="subheading" /></h2>
                                <div class="img">
                                    <img src="../images/{image}" width="100%" height="auto"/>
                                </div>
                                <xsl:value-of select="description" />
                            </a>
                        </xsl:for-each>
                    </div>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Я также попытался использовать следующий тег для окружения тегов html, а затем использовал тег инструкции обработки в любом месте между ними:

<xsl:result-document href="example.php" method="html">
</xsl:result-document>

И все еще нет удачи. Кто-нибудь может показать мне, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 05 мая 2020

В спецификациях XSLT и сериализации (все версии) сказано, что это должно дать результат <?php echo 'OK IT DOESN't WORK!!!!!!!!!!!!!!!!!!!';> (плюс некоторые пробелы). На самом деле это бесполезно; это было определено таким образом по историческим причинам, которые трудно припомнить. HTML5 не придает никакого значения инструкциям по обработке, и они сериализуются в формате, который даже бесполезен для PHP.

Я не знаю, почему вы не видите этот вывод, но вопрос в том, в некотором роде c, поскольку правильный вывод вам все равно не пригодится.

Если я правильно помню, метод вывода XML также не так полезен для генерации сценариев PHP, поскольку PHP в общем случае неправильно сформирован XML.

1 голос
/ 04 мая 2020

Причина, по которой ваш xsl:processing-instruction не работает, проста.
Вы определили свой метод вывода как html с помощью инструкции

<xsl:output omit-xml-declaration="yes" method="html" />

. Но HTML не имеет инструкций обработки !
Поэтому просто измените атрибут method в xsl:output на «xml», и ваш код должен работать как и ожидалось.

Итоги:
HTML не имеет инструкций обработки . Только XML делает. С этим изменением некоторая часть вывода выглядит как

<?php 
                        echo 'OK IT DOESN't WORK!!!!!!!!!!!!!!!!!!!';
                        ?>

, что является (вроде) действительной инструкцией обработки .
PS: Я только что протестировал: xhtml также не работает как метод вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...