xsl:variable在XSLT 2.0中没有返回节点集?

时间:2010-05-08 06:36:40

标签: xslt-2.0

我正在尝试从xsl变量中获取节点集以进行计算。但我的代码只适用于Opera,与其他浏览器一起使用,我不断收到错误。

请帮我修复所有浏览器的运行情况。提前谢谢。

以下是xslt代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="html"/>

<xsl:variable name="multipleSet">
 <xsl:for-each select="myNums/numSet">
  <xsl:element name="multiple"><xsl:value-of select="num1 * num2"/></xsl:element>
 </xsl:for-each>
</xsl:variable>
<xsl:template match="/">
 <table border="1">
    <tr>
     <th>Num 1</th>
     <th>Num 2</th>
     <th>Multiple</th>
    </tr>
   <xsl:for-each select="myNums/numSet">
    <tr>
     <td><xsl:value-of select="num1"/></td>
     <td><xsl:value-of select="num2"/></td>
     <td><xsl:value-of select="num1 * num2"/></td>
    </tr>
   </xsl:for-each>
    <tr>
     <th colspan="2" align="right">Total:</th>
     <td><xsl:value-of select="sum($multipleSet/multiple)"/> </td>
    </tr>
 </table>
</xsl:template>
</xsl:stylesheet>

和xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<myNums>
 <numSet>
  <num1>5</num1>
  <num2>5</num2>
 </numSet>
 <numSet>
  <num1>10</num1>
  <num2>5</num2>
 </numSet>
 <numSet>
  <num1>15</num1>
  <num2>20</num2>
 </numSet>
</myNums>

1 个答案:

答案 0 :(得分:0)

Web浏览器通常不支持xslt 2.0。 Xpath sum()需要一个节点集。你传递的是“结果树片段”。结果树片段数据类型已在XSLT 1.1中删除。所以你所经历的是:

  • Opera不会通过错误消息告诉您它不支持xslt 2.0(Opera specification
  • Opera不完全符合1.0规范

您可以尝试指定version="1.1"并查看是否有帮助。否则,您可以尝试浏览器是否支持exsl:node-set()