2013-05-16 28 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没有任何意义。

相关问题