在 XPath 表达式中使用 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>
When I use my XPath expression with a hardcoded variable, it gives me the right result:
<xsl:value-of select="count(//n-gram[@frequency > 50])"/>
But when I use a parameter of my template, it gives me a complete different result:
<xsl:value-of select="count(//n-gram[@frequency > $freq])"/>
Can somebody tell me what I'm doing wrong?
Complete code as reference (I'm generating a XAML file with XSL):
XML file:
<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 templates:
<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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$freq
真的是一个数字吗?使用<代码> [@频率> number($freq)] 强制转换参数
is
$freq
really a number ?use
[@frequency > number($freq)]
to force casting the param