2013-05-16 29 views
1

我想從一個xml文檔的xsl轉換中創建一個帶有php塊的html文檔(僅用於學習目的)。我正在使用<xsl:processing-instruction>標記。爲什麼我的xsl處理指令缺少問號?

&ltxsl:stylesheet version="1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> 
    &ltxsl:template match="/"> 
    &ltxsl:processing-instruction name="php"> 
    &ltxsl:text> 
     setcookie("cookiename", "cookievalue"); 
     echo ""; 
    </xsl:text> 
    </xsl:processing-instruction> 
    &lthtml> 
     &lthead> 
     &ltmeta charset="utf-8" /> 
     </head> 
     &ltbody> 
     &ltxsl:apply-templates /> 
     </body> 
    </html> 
    </xsl:template> 
    &ltxsl:template match="pagina"> 
    &ltxsl:for-each select="paragraf"> 
    &ltp> 
     &ltxsl:value-of select="."/> 
    </p> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet>

結果爲:

<?php 
     setcookie("ceva", "textceva"); 
     echo "";> 
&lthtml> 
    &lthead> 
     &ltmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     &ltmeta charset="utf-8"> 
    </head> 
    &ltbody> 
    &ltp> 
     text 1 
    </p> 
    &ltp> 
     text 2 
    </p> 
    </body> 
</html>

爲什麼第二個問號失蹤?我期待着像<?php setcookie(...).. ?>

+0

似乎工作正常,當我嘗試它。你在使用什麼XSLT處理器? – JLRishe

回答

1

這是因爲你的pi(處理指令)是一個SGML處理指令(HTML是SGML)。通常,XSLT的默認輸出是XML,但是您使用的任何處理器必須默認爲HTML(或者您在XSLT示例中省略了某些內容)。另一個線索指出,你的meta元素沒有在輸出中關閉。

實施例(注意method="html"):

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes" method="html"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/"> 
     <html> 
      <xsl:processing-instruction name="test">pi</xsl:processing-instruction> 
     </html> 
    </xsl:template> 

</xsl:stylesheet> 

輸出(使用XSLT作爲輸​​入(或任何XML文件))

<html><?test pi></html> 

要強制XML pi,請添加xsl:output

<xsl:output indent="yes" method="xml"/> 
+0

如果頂級元素os在no-namespace中,則指定的默認值爲html,就像它在這裏一樣。 –

+0

@DavidCarlisle - 謝謝大衛。我是這麼認爲的,但並不確定這麼說。 –

0

我的理解是,HTML中的處理指令的正確表示是(或在相關時間點)省略問號的,而XSLT序列化的規範說這是應該由HTML輸出方法。對不起,我現在沒有時間查看規格來確認。

當然,您正試圖生成在PHP規範中定義的東西,而不是HTML規範,而XSLT序列化規範對PHP沒有任何意義。

相關問題