我正在执行xsl转换,在其中我使用以下代码调用带有param的模板
<xsl:call-template name="GenerateColumns">
<xsl:with-param name="curRow" select="$curRow"/>
<xsl:with-param name="curCol" select="$curCol + 1"/>
</xsl:call-template>
这会调用一个模板函数,该函数以HTML格式输出表格元素的一部分。 curRow和curCol用于确定我们在表中的行和列。 gbl_maxCols设置为html表中的列数
<xsl:template name="GenerateColumns">
<xsl:when test="$curCol <= $gbl_maxCols">
<td>
<xsl:attribute="colspan">
<xsl:value-of select="/page/column/@skipColumns"/>
</xsl:attribute>
</xsl:when>
</xsl:template>
这个函数的结果是一组td元素,但是其中一些元素(skipColumn属性大于1的那些元素跨越1列,我需要在下一次调用generateColumns时跳过这么多列。< / p>
这就像我期望的那样,我只是增加了curCol参数,但我有一个案例,我需要使用数学中xml属性skipColumns的值来计算curCol的值。在上面的例子中,我遍历所有列,这适用于我的大多数用例。但是在相同的情况下,我需要跳过一些列,并且需要从xml属性传递该值以计算我需要跳过的列数。
我天真的第一次尝试是这样的
<xsl:call-template name="GenerateColumns">
<xsl:with-param name="curRow" select="$curRow"/>
<xsl:with-param name="curCol" select="$curCol + /page/column/@skipColumns"/>
</xsl:call-template>
但不可理喻的是,这似乎不起作用。有没有办法在计算中使用xml页面中的属性来计算xsl中param的值。
我的xml页面是这样的(由于xml文件相当大而编辑很多)
<page>
<column name="blank" skipColumns="1"/>
<column name="blank" skipColumns="1"/>
<column name="test" skipColumns="3"/>
<column name="blank" skipColumns="1"/>
<column name="test2" skipColumns="6"/>
</page>
在所有这些之后我想拥有一组td元素,如下面的
<td></td><td></td><td colSpan="3"></td><td></td><td colSpan="6"></td>
如果我只是遍历列,我最终会得到类似这样的东西,这给了我更多的td元素而不是我应该拥有的
<td></td><td></td><td colSpan="3"></td><td></td><td colSpan="6"></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
已编辑以提供更多信息
答案 0 :(得分:0)
我仍然没有完全确定你要做什么,但我可以看到你创建$ curCol值的问题。
您的作业看起来像这样
<xsl:with-param name="curCol" select="$curCol + **/page/column/@skipColumns**"/>
select是将$ curCol的值添加到@skipColumns属性的序列中。这是不允许的。您可以选择特定属性并为其添加值,例如
<xsl:with-param name="curCol" select="$curCol + /page/column**[1]**/@skipColumns"/>
或使用参数
<xsl:with-param name="curCol" select="$curCol + /page/column**[$index]**/@skipColumns"/>
然后你会得到你想要的价值。
答案 1 :(得分:0)
我的理解是,您希望将当前col的编号添加到属性@skipColumns中的值。
假设上下文节点是'column'元素:
<xsl:call-template name="GenerateColumns">
<xsl:with-param name="curRow" select="$curRow"/>
<xsl:with-param name="curCol" select="number($curCol) + number(@skipColumns)"/>
</xsl:call-template>