我如何在 XSL 中的 javascript for 循环中获得一个 less 来工作?

Kyl*_*yle 5 javascript xml xslt loops cdata

我正在使用 CDATA 来转义脚本,但在 IE8 的调试器中,我仍然在 for 循环条件中收到此消息:“预期的 ')'”。我假设它仍然认为 ; 在<由 CDATA 生成的结束循环条件中。

我的 XSL 模板中的原始脚本:

<script type="text/javascript" language="javascript">  
<![CDATA[
    function submitform(form){
        var oErrorArray = new Array();
        for (i=0;i<form.length;i++) 
        eval("oErrorArray["+i+"]=oError"+i);
        var goForm = true;
        for(i=0;i<form.length;i++) {
            oErrorArray[i].innerHTML = "";
            if(form[i].value="")){
                oErrorArray[i].innerHTML = "Error - input field is blank";
                goForm = false;
            }           
        }
        if(goForm == true) form.submit();
    }
    function resetform(form){
        form.reset();
    }
]]>
</script>
Run Code Online (Sandbox Code Playgroud)

转换后生成的代码(来自 IE8 调试器)

<script type="text/javascript" language="javascript">
    function submitform(form){
        var oErrorArray = new Array();
        for (i=0;i&lt;form.length;i++) 
        eval("oErrorArray["+i+"]=oError"+i);
        goForm = true;
        for(i=0;i&lt;form.length;i++) {
            oErrorArray[i].innerHTML = "";
            if(form[i].value="")){
                oErrorArray[i].innerHTML = "Error - input field is blank";
                goForm = false;
            }           
        }
        if(goForm == true) form.submit();
    }
    function resetform(form){
        form.reset();
    }
</script>
Run Code Online (Sandbox Code Playgroud)

IE8 调试器报告的错误:预期为 ')' login.xml,第 29 行字符 30 (紧跟在第一个“form.length”之后)

Der*_*ger 3

您需要显式禁用输出转义。

http://www.w3.org/TR/xslt#disable-output-escaping

正如凯尔在评论中指出的那样,您特别需要

(1) 删除CDATA标签并

(2)<xsl:text disable-output-escaping="yes">&lt;</xsl:text>在需要不转义字符的地方插入。

  • 谢谢!效果非常好。我刚刚删除了 CDATA 标签,并在需要的地方插入了“&lt;xsl:textdisable-output-escaping="yes"&gt;&lt;&lt;/xsl:text&gt;”。 (2认同)