我有一个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)
}
答案 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>