Использование параметра XSLT в выражении XPath - PullRequest
2 голосов
/ 19 апреля 2011

Когда я использую свое выражение XPath с жестко закодированной переменной, это дает мне правильный результат:

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

Но когда я использую параметр моего шаблона, он дает мне совершенно другой результат:

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

Может кто-нибудь сказать мне, что я делаю не так?

Полный код в качестве ссылки (я создаю XAML-файл с XSL):

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 Ответ

2 голосов
/ 19 апреля 2011

действительно ли $freq число?

используйте [@frequency > number($freq)] для принудительного применения параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...