XSL:跨XSL模板传递Javascript变量&档

时间:2011-06-23 15:49:28

标签: javascript xslt

我目前正在使用一组用于报告的XSL模板。我遇到的问题是我的javascript变量没有更新。我目前包含在页面顶部,但Javascript变量在其下面定义。这可能是问题吗?我应该在哪里定义这些变量?有没有一种特殊的方法在XSL模板之间传递它们?到目前为止,我还没有使用过任何Javascript,而且我只使用过XSL。但是,我需要执行一些计算而不需要更新变量,因此我需要弄清楚如何让变量在模板之间移动。还是有办法吗?

因此在下面,在一些模板中调用了函数调用,并且还有一个语句根据XSL值更新开始和结束日期值。问题是所有正在打印的是初始设定值,而不是更新的值。

任何指导我正确方向的帮助都会很棒。

提前致谢!

<xsl:param name="DisplayEmptyFields" select="true()"/>
<xsl:template match="/">
<xsl:include href="./Templates/styles.xslt"/>
<xsl:include href="./Templates/md_GeneralReportTemplates.xslt"/>
<xsl:include href="./Templates/md_RunDetailReportTemplate.xslt"/>

<html>
    <head>

            <script type="text/javascript">
                var d = "";
                var startdate = "6/7/2100 10:56:34 AM";
                var enddate = "6/7/2008 10:56:34 AM";


                var totruns = 0;
                var passedruns = 0;
                var failedruns = 0;
                var date.flag = 0;

                function ticks(){
                    totruns++;
                }
                function passticks(){
                    passedruns++;
                }
                function failticks(){
                    failedruns++;
                }

            </script>   
            <xsl:call-template name="DefineStyles"/>


        </head>
        <body>

    <xsl:call-template name="pageheader"/>

           <xsl:apply-templates select="run"/>
        </xsl:for-each>

           <table xsl:use-attribute-sets="report-detail-table-format">
            <tr xsl:use-attribute-sets="report-header-row-table-format">
                <th colspan="4">
                    Summary
                </th>
            </tr>
             <tr>
             <td><b>Total Runs: </b><script type="text/javascript">document.write(totruns);</script></td>
             <td><b>Passed Runs: </b><script type="text/javascript">document.write(passedruns);</script></td>
             <td><b>Failed Runs: </b><script type="text/javascript">document.write(failedruns);</script></td>
             <td><b>Pass Rate: </b><script type="text/javascript">document.write(Math.round((passedruns/totruns*100)*Math.pow(10,2))/Math.pow(10,2));</script>%</td>

             </tr>
             <tr>
             <td colspan="2"><b>Execution Start: </b><script type="text/javascript">document.write(startdate);</script></td>
             <td colspan="2"><b>Execution End: </b><script type="text/javascript">document.write(enddate);</script></td>

             </tr>
             </table>
                </body>
              </html>

2 个答案:

答案 0 :(得分:1)

就XSLT样式表而言,<script>元素只是数据,它们不是可执行代码。您对处理模型感到困惑:执行XSLT转换以生成HTML页面,然后加载HTML页面;浏览器通常会触发onLoad事件,这将导致页面上的一些Javascript执行。所以你发生了两件完全不同的事情:正在生成一个HTML页面,并且正在执行该页面上的Javascript。

答案 1 :(得分:0)

我发现var date.flag = 0;

有问题
[2011-06-23 18:49:11] JavaScript
Inline script compilation
Syntax error at line 9 while loading:
            var date.flag = 0;
--------------------^
expected ';', got '.'

此错误会使您的变量未定义。尝试评论/修改它,我想它应该没问题。