如何在 XSLT 中编写 PHP

Posted

技术标签:

【中文标题】如何在 XSLT 中编写 PHP【英文标题】:How to write PHP in XSLT 【发布时间】:2020-08-19 08:30:56 【问题描述】:

我一直在尝试在 .xsl 文件中编写一个简单的 php echo 语句,但是当我输入处理指令标签时,我查看的每个站点似乎都不适合我。我什至尝试更改 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"  />
                                </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>

仍然没有运气。有人可以告诉我我做错了什么吗?

【问题讨论】:

如何运行这个 XSLT? result-document 是一种 XSLT 2.0(不是 1.0)方法。检查源代码(PHP 可能是 HTML 注释),客户端浏览器在此处显示:xsltfiddle.liberty-development.net/naZXVF6 不清楚你想实现什么:你想用XSLT来生成PHP解释器的输入吗?您如何运行您的 XSLT 代码,如果您希望 PHP 被执行,您如何查看或“执行”结果? 【参考方案1】:

您的xsl:processing-instruction 不起作用的原因很简单。 您将输出方法定义为html 与您的

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

说明。 但 HTML 没有处理指令 因此,只需将xsl:outputmethod 属性更改为“xml”,您的代码就会按预期工作。

总结: HTML 没有处理指令。只有 XML 可以。通过此更改,输出的某些部分看起来像

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

这是(某种)有效的处理指令。 P.S.:我刚刚测试过:xhtml 也不能作为输出方法。

【讨论】:

我将方法属性更改为等于 xml,但仍然没有运气。当我将方法属性更改为 php 时,我显示没有处理指令。为什么这不起作用? 我成功使用了&lt;xsl:output omit-xml-declaration="yes" method="xml" /&gt;。顺便说一句,没有名为“php”的方法属性值。 我复制了你所拥有的输出行,但它仍然没有输出我的处理指令。 xsl:output 行必须包含method="xml" 属性。否则它将无法正常工作。 某事无法正常工作。因为当我将方法更改为 xml 并转到我的 index.xml 文件时,它会输出我头脑中的所有 css 代码。【参考方案2】:

XSLT 和序列化规范(所有版本)说这应该产生输出&lt;?php echo 'OK IT DOESN't WORK!!!!!!!!!!!!!!!!!!!';&gt;(加上一些空格)。这实际上没有用。由于难以回忆的历史原因,它被这样定义。 HTML5 对处理指令没有任何意义,它们以对 PHP 甚至没有用的格式进行序列化。

我不知道你为什么看不到这个输出,但这个问题有点学术,因为正确的输出对你没有用处。

如果我没记错的话,XML 输出方法对于生成 PHP 脚本也不是很有用,因为 PHP 在一般情况下不是格式良好的 XML。

【讨论】:

以上是关于如何在 XSLT 中编写 PHP的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSLT 编写 DHTML

如何编写 XSLT 将 XML 转换为 CSV?

如何在 XSLT 条件下更改硬编码元素的位置?

如何运行 XSLT 文件?

如何使用 Muenchian 分组 XSLT 1.0 在每个目录中按标题分组

如何判断我编写的 XSLT 3.0 是不是实际上是流式传输 XML?