首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的xsl处理指令缺少一个问号?

为什么我的xsl处理指令缺少一个问号?
EN

Stack Overflow用户
提问于 2013-05-16 23:51:51
回答 2查看 957关注 0票数 2

我想从一个xml文档的xsl转换创建一个带有php块的html文档(只是为了学习目的)。我使用的是<xsl:processing-instruction>标签。

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <xsl:processing-instruction name="php">
    <xsl:text>
        setcookie("cookiename", "cookievalue");
        echo "";
    </xsl:text>
    </xsl:processing-instruction>
    <html>
        <head>
        <meta charset="utf-8" />
        </head>
        <body>
        <xsl:apply-templates />
        </body>
    </html>
    </xsl:template>
    <xsl:template match="pagina">
    <xsl:for-each select="paragraf">
    <p>
        <xsl:value-of select="."/>
    </p>
    </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

结果是:

代码语言:javascript
复制
<?php 
        setcookie("ceva", "textceva");
        echo "";>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta charset="utf-8">
    </head>
    <body>
    <p>
        text 1
    </p>
    <p>
        text 2
    </p>
    </body>
</html>

为什么缺少第二个问号?我期待的是像<?php setcookie(...).. ?>这样的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-17 02:16:41

这是因为您的pi (处理指令)是SGML处理指令(HTML是SGML)。通常,XSLT的缺省输出是XML,但是无论使用什么处理程序,都必须缺省为HTML (或者在XSLT示例中省略了一些内容)。指出这一点的另一个线索是,您的meta元素在输出中没有关闭。

示例(请注意method="html"):

XSLT 1.0

代码语言:javascript
复制
<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输出(使用XSLT作为输入(或任何文件))

代码语言:javascript
复制
<html><?test pi></html>

要强制使用XML pi,请添加xsl:output

代码语言:javascript
复制
<xsl:output indent="yes" method="xml"/>
票数 2
EN

Stack Overflow用户

发布于 2013-05-17 01:16:28

我的理解是,HTML中处理指令的正确表示是(或者曾经是)省略问号,而XSLT序列化规范规定HTML输出方法应该这样做。对不起,我现在没有时间查阅规格书来确认这一点。

当然,您正在尝试生成在PHP规范而不是HTML规范中定义的东西,而XSLT序列化规范对PHP一无所知。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16592110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档