在 xsl 中的文档类型之前的代码


PHP code before doctype in xsl

我正在使用XSL来转换XML文档。 有没有办法在<!doctype html>声明之前用PHP代码构建模板?

<!-- I want some PHP code to go here -->
<xsl:processing-instruction name="php">
error_reporting(0);
define('__ROOT__', dirname(dirname($_SERVER["DOCUMENT_ROOT"])));
require_once(__ROOT__."/classes/CasController.class.php");
$cas = new CasController();
?</xsl:processing-instruction>
<!-- XSL content goes after here -->
<xsl:output method="html" version="5.0" indent="yes" encoding="UTF-8" include-content-type="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/document">
    <!-- begin html -->
    <html lang="en">
        <head>
        </head>
        <body>
        </body> 
    </html> 
    <!-- end html -->
</xsl:template>

输出 HTML 将是

<?php error_reporting(0);
define('__ROOT__', dirname(dirname($_SERVER["DOCUMENT_ROOT"])));
require_once(__ROOT__."/classes/Controller.class.php");?>
<!DOCTYPE html>
<html lang="en">
    <head>
    </head>
    <body>
    </body> 
</html>

要在 <!DOCTYPE HTML> 之前包含 PHP,请使用不带 version="5.0" 属性的 <xsl:output method="html" indent="yes" encoding="UTF-8" include-content-type="no" />。 这会将输出声明为 HTML 而不带<!DOCTYPE HTML>

将 PHP 处理指令插入模板中您希望它的位置:

<xsl:processing-instruction name="php">
define('__ROOT__', dirname(dirname($_SERVER["DOCUMENT_ROOT"])));
?</xsl:processing-instruction>

然后使用 XML 输出转义创建文档类型标记:

<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE HTML&gt;</xsl:text>