在XPath表达式中使用XSLT参数

时间:2011-04-19 09:29:13

标签: xml xaml xslt

当我使用带有硬编码变量的XPath表达式时,它给出了正确的结果:

    <xsl:value-of select="count(//n-gram[@frequency > 50])"/>

但是当我使用模板的参数时,它会给我一个完全不同的结果:

    <xsl:value-of select="count(//n-gram[@frequency > $freq])"/>

有人可以告诉我我做错了吗?

完整代码作为参考(我正在使用XSL生成XAML文件):

XML文件:

<n-grams>
<n-gram frequency="3">r n u</n-gram>
<n-gram frequency="1">o H e</n-gram>
<n-gram frequency="2">r n t</n-gram>
<n-gram frequency="2">N i c</n-gram>
<n-gram frequency="2">a u l</n-gram> ...

XSL模板:

    <xsl:template name="fill-table">
    <xsl:param name="freq"/>
    <xsl:param name="startRow"/>
    <xsl:param name="startCol"/>

    <xsl:call-template name="get-textblock">
        <xsl:with-param name="row">
            <xsl:value-of select="$startRow "/>
        </xsl:with-param>
        <xsl:with-param name="column">
            <xsl:value-of select="$startCol + 1"/>
        </xsl:with-param>
        <xsl:with-param name="text">
            <xsl:value-of select="count(//n-gram[@frequency > $freq])"/>
        </xsl:with-param>
        <xsl:with-param name="type">
            <xsl:value-of select="'ValueText'"/>
        </xsl:with-param>
    </xsl:call-template>

</xsl:template>


<xsl:template name="get-textblock">
    <xsl:param name="row"/>
    <xsl:param name="column"/>
    <xsl:param name="text"/>
    <xsl:param name="type"/>
    <xsl:param name="colspan" select="1"/>
    <xsl:element name="TextBlock">
        <xsl:attribute name="Grid.Column">
            <xsl:value-of select="$column"/>
        </xsl:attribute>
        <xsl:attribute name="Grid.Row">
            <xsl:value-of select="$row"/>
        </xsl:attribute>
        <xsl:attribute name="Style">
            <xsl:value-of select="concat('{StaticResource ',$type,'}')"/>
        </xsl:attribute>
        <xsl:attribute name="Grid.ColumnSpan">
            <xsl:value-of select="$colspan"/>
        </xsl:attribute>
        <xsl:value-of select="$text"/>
    </xsl:element>
</xsl:template>

1 个答案:

答案 0 :(得分:2)

$freq真的是一个数字吗?

使用[@frequency > number($freq)]强制投射参数