xsl中doctype之前的PHP代码

时间:2016-02-24 15:37:46

标签: php xslt

我正在使用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>

1 个答案:

答案 0 :(得分:0)

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

将PHP处理指令插入到模板中的位置:

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

然后使用XML output escaping:

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