Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSL工作表中javascript函数的范围_Javascript_Xslt - Fatal编程技术网

XSL工作表中javascript函数的范围

XSL工作表中javascript函数的范围,javascript,xslt,Javascript,Xslt,我需要计算XML文件中每行数据的值。我原以为这样会无痛,但事实并非如此。我从firefox得到的只是我的函数没有定义。这个文件不是从服务器加载的,它是静态的,我也静态地对它应用了XSL。使用HTML,我会这样做: <html> <head> <script type="text/javascript"> function calcVal(price, qty){ var valIs = 0; valIs = price * qty;

我需要计算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工作表中时,函数在调用时没有定义:

注意:我尝试过不使用CDATA,将脚本标记放在XSL:COMMENT中,也不使用XSL:COMMENT,等等,所有我能想到的变体

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


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

你不能在Mozilla浏览器(如Firefox)中使用document.write和XSLT生成的HTML,因为Gecko引擎和它的XSLT处理器直接创建HTML结果树并呈现它,无法使用document.write插入标记片段。看见
至于使用Javascript计算XSLT转换的HTML结果中的某些值,也可以使用纯XPath进行计算,当然,然后使用纯XSLT输出计算值,不需要添加Javascript。

在Mozilla浏览器(如Firefox)中,不能将document.write与XSLT生成的HTML一起使用,因为它们使用的Gecko引擎及其XSLT处理器直接创建HTML结果树并对其进行渲染,无法使用document.write注入标记片段。换句话说,我应该用所需的js函数编写一些“包装器”html页面,加载XML,然后应用XSLT,然后在例如document.ready上计算?我将检查一下这是否有效。我将首先检查计算是否不能简单地用纯XSLT实现。如果不支持,那么当然可以使用DOM API来创建文本节点或元素节点,并在它们之前附加child或insertChild,而不是document.write。OMG,我今天从XSLT开始,我遵循了w3schools教程,并假设是这样,他们没有提到任何有关计算的内容。实际上,我可以用纯XSLT执行简单的计算。谢谢,Martin Honnen。你看到的是价值这么简单的东西:
<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>