如何使用从一个XSLT文件到另一个XSLT文件的变量

时间:2015-06-11 09:10:31

标签: javascript html xslt

我有一个scanario,我必须在xslt文件中传递javascript函数的变量。实际上我在另一个xslt文件中操作了值,我想在这里重用它。我已经给出了我尝试过的样本。我做错了什么。

sub.xslt

.
.
    <xsl:variable name="textValuesCSV">
           <!-- some manipulation code -->
    </xsl:variable>
.
.

main.xslt

.
.
    <xsl:include href="sub.xslt"/>
    <xsl:template name="test">
        <script src="testScript.js"></script>
        <script type="text/javascript">   
                  var name = "<xsl:value-of select="$textValuesCSV"/>";
           if(typeof analysis == 'function') { 
                analysis(name);
            }
        </script>   
    </xsl:template>
.
.

testScript.js

function analysis(name) {
   alert(name)
}

1 个答案:

答案 0 :(得分:0)

在调用包含的xslt之前,您必须在main.xslt中执行第一个变量声明。 然后,您可以在sub.xslt中为变量赋予更新值。

现在该值将存在于main.xslt的上下文中,您可以在javascript函数中调用它。

P.S。调用模板的方式取决于XML输入。如果有一个名为<test>的元素,您希望按<xsl:apply-templates match="test"/>而不是<xsl:call-template name="test"/>触发模板 sub.xslt

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:variable name="textValuesCSV">1234</xsl:variable>
</xsl:stylesheet>

main.xslt

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="textValuesCSV"/>
<xsl:include href="sub.xslt"/>

   <xsl:template match="/">
      <html>
         <xsl:call-template name="test"/>
      </html>
   </xsl:template>

    <xsl:template name="test">
        <xsl:copy  select="$textValuesCSV"/>
        <script src="testScript.js"></script>
        <script type="text/javascript">   
           var name = "<xsl:value-of select="$textValuesCSV"/>";
           if(typeof analysis == 'function') {analysis(name);}
        </script>   
    </xsl:template>
</xsl:stylesheet>

DOM中的输出:

<document>
   <html>
      <script src="testScript.js"/>
      <script type="text/javascript">
        var name = "1234";
        if(typeof analysis == 'function') {analysis(name);}
      </script>
   </html>