为什么我总是从数组变量中获取第一项



$headerTitles有4个值,但我总是用"1〃;指数为什么?

`<xsl:variable name="tgroup" select="../../.."/>
<xsl:variable name="colspecs" select="$tgroup/colspec"/>
<xsl:variable name="headerTitles" select="$tgroup/thead/row/entry"/>
<xsl:variable name="columnNumber">
<xsl:call-template name="entry.getColspecAttributeValue">
<xsl:with-param name="colspecs" select="$colspecs" />
<xsl:with-param name="attrName">colNum</xsl:with-param>
<xsl:with-param name="isLastEmpty">false</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:attribute name="columnName">
**<xsl:value-of select="$headerTitles[$columnNumber]"/>**
</xsl:attribute>`

$headerTitles有4个值,但我总是用";1〃;指数为什么?

——根据评论进行编辑——

$headerTitles有4个值,但我总是用"接收值;1〃;指数为什么?

如果指令:

<xsl:value-of select="$headerTitles[3]"/>

返回第三个条目的字符串值,但是:

<xsl:value-of select="$headerTitles[$columnNumber]"/>

返回第一个条目的值,则$columnNumber变量不包含数字3。相反,它包含一些值,当作为布尔值计算时,这些值对于所有条目都返回true(甚至可以是字符串"3"(。

在这种情况下,XSLT1.0中的xsl:value-of指令将返回所选节点集中第一个节点的字符串值-请参阅:
https://www.w3.org/TR/1999/REC-xslt-19991116/#value-的https://www.w3.org/TR/1999/REC-xpath-19991116/#section-字符串函数

在XSLT1中,使用变量声明

<xsl:variable name="columnNumber">
<xsl:call-template name="entry.getColspecAttributeValue">
<xsl:with-param name="colspecs" select="$colspecs" />
<xsl:with-param name="attrName">colNum</xsl:with-param>
<xsl:with-param name="isLastEmpty">false</xsl:with-param>
</xsl:call-template>
</xsl:variable>

变量columnNumber的值是一个结果树片段,包含xsl:call-template调用返回的任何内容,因此它是一个可能包含带数字的文本节点的结果树片段。

在谓词<xsl:value-of select="$headerTitles[$columnNumber]"/>内部,columnNumber是一个结果树片段,它不是一个位置谓词,而只是一个布尔谓词,当任何结果树片段在布尔上下文中求值为true时,它总是求值为true。

因此,您需要使用<xsl:value-of select="$headerTitles[number($columnNumber)]"/><xsl:value-of select="$headerTitles[position() = $columnNumber]"/>来确保根据位置进行选择。

相关内容

  • 没有找到相关文章

最新更新