XSL表中的javascript函数的范围

时间:2014-10-06 14:24:25

标签: javascript xslt

我需要计算XML文件中每行数据的值。我认为这将是无痛的,但它不是。我从firefox获得的是我的功能没有被定义。这个文件没有从服务器加载,它是静态的,我也静态地应用了一个XSL。使用HTML我会这样做:

<html>
<head>
<script type="text/javascript">
  function calcVal(price, qty){
    var valIs = 0;
    valIs = price * qty;
    return valIs;
  }
</script>
</head>
<body>
Value is: <script type="text/javascript">document.write(calcVal(100,2.6));</script>
</body>
</html>

当我把它放在XSL表中时,在<body>

中调用时没有定义函数
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<script type="text/javascript">
<xsl:comment>
<![CDATA[
  function calcVal(price, qty){
    var valIs = 0;
    valIs = price * qty;
    return valIs;
  }
]]>
</xsl:comment>
</script>
</head>
<body>
Value is: <script type="text/javascript">document.write(calcVal(100,2.6));</script>
</body>
</xsl:template>
</xsl:stylesheet>

注意:我已经尝试过没有CDATA,将SCRIPT标记放在XSL:COMMENT中,没有XSL:COMMENT,等等,我能想到的所有变化。

我需要为每行数据多次执行此函数,所以问题是如何在XSL的剩余部分中使用此功能

编辑我应该补充一点,IE11在我的XSL状态下计算这个值。

1 个答案:

答案 0 :(得分:0)

你不能在Mozilla浏览器(如Firefox)中使用带有XSLT生成的HTML的document.write作为他们使用的Gecko引擎,并且它的XSLT处理器直接创建HTML结果树并呈现它,没有办法注入片段使用document.write标记。见https://developer.mozilla.org/de/docs/XSL_Transformations_in_Mozilla_FAQ#What_about_document.write.3F。 至于您使用Javascript来计算XSLT转换的HTML结果中的某些值,您也可以使用纯XPath进行计算,当然然后使用纯XSLT输出计算值,不需要输入Javascript。