Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xsl:javascript函数中的调用模板_Javascript_Xml_Xslt - Fatal编程技术网

xsl:javascript函数中的调用模板

xsl:javascript函数中的调用模板,javascript,xml,xslt,Javascript,Xml,Xslt,我在谷歌上到处找了找,不知道如何正确地实现这一点。要么根本不可能,要么我缺少某种语法?我已经很久没有使用JavaScript了,所以我可能错过了一些非常简单的东西 我使用和XML1.0将一些JavaScript嵌入到XSL文件中 所以我有这样的想法: function seconds(s) { s = s / 60; document.write(s + " "); if (s > 2) { document

我在谷歌上到处找了找,不知道如何正确地实现这一点。要么根本不可能,要么我缺少某种语法?我已经很久没有使用JavaScript了,所以我可能错过了一些非常简单的东西

我使用
和XML1.0将一些JavaScript嵌入到XSL文件中

所以我有这样的想法:

    function seconds(s) {
        s = s / 60;

        document.write(s + " ");
        if (s > 2) {
            document.write(s + " " + '<xsl:call-template name="resources"><xsl:with-param name="res" select="minutes"/></xsl:call-template>');
        }
        else {
            document.write(s + " " + '<xsl:call-template name="resources"><xsl:with-param name="res" select="minute"/></xsl:call-template>');
        }
    }
功能秒数{
s=s/60;
文件。写(s+“”);
如果(s>2){
文件。写入(s++);
}
否则{
文件。写入(s++);
}
}
现在的情况是,我得到了以“60”变量“s”为增量的秒数。我需要计算到分钟,但是,我需要调用一个模板来实际打印字符串“分钟”或“分钟”。我知道调用模板在XSL中工作。但当我将其嵌入JavaScript时,它不会显示“分钟”或“分钟”。它将只显示更正后的整数和空格

我该如何将这一xsl行嵌入JavaScript,还是完全可能

编辑:
因此,我将尝试进一步澄清。XML文件上的数据并不重要。我想我的问题是,对于document.write行,将xxl代码嵌入其中是否有问题。因为它实际上并不打印模板要打印的内容(基本上就是翻译“分钟/分钟”这个词)无论用户选择哪种语言,如果语言不存在,则默认为英语。因此这并不重要。我只需要知道document.write行的语法有什么问题,以防止XSL代码显示。或者是否可以将其嵌入JavaScript?所有JavaScript都是通过上的CDATA封装完成的一个.xsl文件。希望这能进一步澄清它。

您的问题有点让人困惑,因为它给人的印象是您试图使用Javascript调用一个xsl:template,这是不可能的。但我想您实际上说的是,您试图在XSLT中调用一个模板,作为输出一些刚刚发生的文本的一部分ens是javascript,供以后在浏览器中使用

不起作用的原因是,正如您在问题中所说,您输出的javascript文本被以下内容包围

<xsl:text disabled-output-escaping="yes"><![CDATA[
  ... Javascript code here..
]]></xsl:text>

特别是,CDATA标记的使用意味着XSLT将其内部的所有内容都视为未分析的文本,因此,如果您碰巧有一些使用XSLT语法的文本,那么它就与其他文本无关了

要解决这个问题,您可以在每次调用xsl:call模板之前关闭CDATA,然后重新打开

<xsl:text disable-output-escaping="yes"><![CDATA[
function seconds(s) {
    s = s / 60;

    document.write(s + " ");
    if (s > 2) {
        document.write(s + " " + ']]></xsl:text>
          <xsl:call-template name="resources"><xsl:with-param name="res" select="'minutes'"/></xsl:call-template>
          <xsl:text disable-output-escaping="yes"><![CDATA[');
    }
    else {
        document.write(s + " " + ']]></xsl:text>
           <xsl:call-template name="resources"><xsl:with-param name="res" select="'minute'"/></xsl:call-template>
           <xsl:text disable-output-escaping="yes"><![CDATA[');
    }
}
  ]]>
  </xsl:text>       
2){
document.write(s++']>
');
}
否则{
文件。写入(s++);
}
}
有两点需要注意:

1) 在您的问题中,当“禁用输出转义”应为“禁用输出转义”时,请参考“禁用输出转义”


2) 在这里,您使用参数调用“resources”模板,如果您希望传入一个字符串值,而不是节点的值,请将该值用撇号括起来<代码>

您是在尝试使用XSLT从XML文档以编程方式编写javascript,还是在尝试从javascript调用XSLT模板?您能提供一个示例XML文档和一个更完整的XSLT吗?添加了更多说明,希望您能帮助我检查语法,或者检查这种类型的嵌入是否可行。您不能在Javascript中运行单个XSL命令。你真的需要包含更多的代码(如果有的话),并且认真思考你要做什么。非常感谢你的帮助。我不知道从XSLT的角度来看,它不是JavaScript,它只是一点文本,被输出供其他东西使用。您可以在自己喜欢的地方开始和结束CDATA!
<xsl:template name="outputSeconds">
function seconds(s) {
    s = s / 60;

    document.write(s + " ");
    if (s <xsl:text disable-output-escaping="yes">&gt;</xsl:text> 2) {
        document.write(s + " " + '<xsl:call-template name="resources"><xsl:with-param name="res" select="'minutes'"/></xsl:call-template>');
    }
    else {
        document.write(s + " " + '<xsl:call-template name="resources"><xsl:with-param name="res" select="'minute'"/></xsl:call-template>');
    }
}
</xsl:template>