javascript - 如何将 XSL 变量传递给 Javascript 函数?

标签 javascript xslt

下面是我的示例 XSL 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    <xsl:template match="/">
        <html>
            <head>
                <script type="text/javascript">
                //<![CDATA[
                function showHide(elementid){
                    if (document.getElementById(elementid).style.display == 'none'){
                        document.getElementById(elementid).style.display = '';
                    } else {
                        document.getElementById(elementid).style.display = 'none';
                    }
                }
                //]]></script>
                <!-- Inserting pie chart  -->
                <script type="text/javascript" src="https://www.google.com/jsapi"></script>
                <script type="text/javascript">
                //<![CDATA[
                google.load("visualization", "1", {packages:["corechart"]});
                google.setOnLoadCallback(drawChart);
                function drawChart() {
                    var data = google.visualization.arrayToDataTable([
                        ['Task', 'Hours per Day'],
                        ['Work',     11],
                        ['Eat',      2],
                        ['Commute',  2],
                        ['Watch TV', 2],
                        ['Sleep',    7]
                    ]);

                    var options = {
                        title: 'My Daily Activities'
                    };

                    var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
                    chart.draw(data, options);
                }
            //]]></script>
            <!--Finishing pie chRt -->
            </head>
            <body>
                <h2>eBuilder Automation Test Suite-Summary</h2>
                <div id="chart_div" style="width: 600px; height: 400px;"></div>
                <table border="1">
                    <tr bgcolor="#808080">
                        <th>Name</th>
                        <th>Total TCS</th>
                        <th>Passed</th>
                        <th>Skipped</th>
                        <th>Errors</th>
                        <th>Failures</th>
                        <th>Pass Rate</th>
                        <th>Tot Time Taken</th>
                    </tr>
                    <xsl:for-each select="testsuite">
                        <xsl:variable name="PassCount">
                            <number>
                                <xsl:value-of select="(@tests - @skipped - @errors - @failures)"/>
                            </number>
                        </xsl:variable>
                        <tr>
                            <td>
                                <xsl:value-of select="@name"/>
                            </td>
                            <td>
                                <xsl:value-of select="@tests"/>
                            </td>

                            <td bgcolor="#32CD32">
                                <xsl:value-of select="(@tests - @skipped - @errors - @failures)"/>
                            </td>
                            <td bgcolor="#FFFF00">
                                <xsl:value-of select="@skipped"/>
                            </td>
                            <td>
                                <xsl:value-of select="@errors"/>
                            </td>
                            <td bgcolor="#FF0000">
                                <xsl:value-of select="@failures"/>
                            </td>
                            <td>
                                <font color="red">
                                    <xsl:value-of select="(msxsl:node-set($PassCount)/number) div @tests * 100"/>%
                                </font> 
                            </td>
                            <td bgcolor="#008000">
                                <xsl:value-of select="@time"/>
                            </td>
                            <!--xsl:value-of select="@failures div @tests *100"/-->
                        </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

我想传递 XSL 变量 PassCount,如下所示:

var data = google.visualization.arrayToDataTable([
          ['Task', 'Hours per Day'],
          ['Work',     passcount],
          ['Eat',      2],
          ['Commute',  2],
          ['Watch TV', 2],
          ['Sleep',    7]
        ]);

有什么聪明的方法可以做到这一点吗?

最佳答案

希望我能回答你的问题(我不太确定,但无论如何)

如果不使用 CDATA,用 xslt 生成 javascript 应该没有问题。 您可以使用 xsl:value-of 将 xslt var 值放在您喜欢的任何位置。 但是如果没有 CDATA,您必须在 javascript 代码中转义一些字符 (<,&)。

 'Work',     <xsl:value-of select="(msxsl:node-set($PassCount)/number)/> ],

var passcount = <xsl:value-of select="(msxsl:node-set($PassCount)/number)/>;
....
['Work',     passcount],

关于javascript - 如何将 XSL 变量传递给 Javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15829024/

相关文章:

javascript - 使用 Dustjs 进行 Angular 模板化

javascript - jQuery 在单击 anchor 元素时处理 href

html - 在 XSLT 文件中很难将图片并排显示

xslt - 防止将 xmlns =""属性添加到 XSLT 1.0 生成的 HTML 元素中

javascript - React - 具有相同 Action 和 reducer 的多个组件

javascript - 三星 SDK 中对象 ID 的奇怪错误

javascript - jQuery 或 JS 显示大图

xslt - 佛 :block-container and FOP compliance

xml - 遍历 XML 树并使用 XSL 查找公共(public)节点文本

java - 在已部署的 Apache 6.0 中转换 XML 时可能出现的错误