在 XPath 表达式中使用 XSLT 参数

发布于 2024-11-02 06:04:04 字数 2411 浏览 0 评论 0原文

当我将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我爱人 2024-11-09 06:04:04

$freq 真的是一个数字吗?

使用<代码> [@频率> number($freq)] 强制转换参数

is $freq really a number ?

use [@frequency > number($freq)] to force casting the param

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文