2015-06-11 116 views
1

我有一個scanario,我必須在xslt文件中傳遞一個javascript函數的變量..其實我有在另一個xslt文件中操作的值,我想要重用這裏。我已經給出了我所嘗試的樣本。我做錯了什麼。如何使用從一個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) 
} 
+0

它失敗了嗎?錯誤是什麼? –

回答

0

你必須做的第一變量聲明中main.xslt,只調用之前包含的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> 

+0

是否有任何工具可以使用它並獲得DOM輸出,正如你在這裏提到的那樣?如果然後請告訴我, –

+0

不工作..得到這個錯誤「一個變量沒有以下兄弟姐妹指示沒有效果」 –

+0

你使用哪個xslt引擎?上述解決方案已在Firefox和Internet Explorer 11中執行。 –

相關問題