2016-02-24 47 views
1

我正在使用XSL轉換XML文檔。有沒有辦法在聲明<!doctype html>之前用PHP代碼構建模板?xsl中的doctype之前的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> 
+0

我得到的錯誤是:

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

然後通過使用XML輸出轉義創建的文檔類型標籤:元素xsl:處理指令不能直接出現在xsl:stylesheet中 –

回答

0

要包含PHP的<!DOCTYPE HTML>之前,使用<xsl:output method="html" indent="yes" encoding="UTF-8" include-content-type="no" />沒有version="5.0"屬性。這將聲明輸出爲HTML,但不包含<!DOCTYPE HTML>

插入,你希望它在你的模板去你的PHP處理指令:

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