XSLT не выводит правильное количество элементов RowDefinition / ColumnDefinition в мой файл XML. - PullRequest
1 голос
/ 28 июля 2011

В XSLT:

По какой-то странной причине, когда я указываю число больше 9 в качестве параметра, в результирующем XML-файле выводятся только 2 элемента RowDefinition / ColumnDefinition. Я использую рекурсивный цикл для обоих.

Это странно, потому что он отлично выводит 9 элементов , когда я даю 9 в качестве значения параметра для rcount / ccount в call-шаблоне draw-grid. Если я укажу 10 в качестве параметра, то внезапно получу только 2 элемента в результирующем XML-файле.

Почему это происходит? Мне нужно 28 строк и 6 цветов.

См. Код:

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
    <xsl:call-template name="draw-grid">
        <!--outputs only 2 RowDefinition elements..-->
        <xsl:with-param name="rcount">10</xsl:with-param>
        <!--works perfectly: I get 9 ColumnDefinition elements-->
        <xsl:with-param name="ccount">9</xsl:with-param>              
        <xsl:with-param name="r">0</xsl:with-param>
        <xsl:with-param name="c">0</xsl:with-param>
    </xsl:call-template>
</xsl:template>

<xsl:template name="draw-grid">
    <xsl:param name="rcount"/>
    <xsl:param name="ccount"/>
    <xsl:param name="r"/>
    <xsl:param name="c"/>

    <xsl:element name="Grid">

        <xsl:element name="Grid.RowDefinitions">
            <xsl:call-template name="draw-rows">
                <xsl:with-param name="rcount">
                    <xsl:value-of select="$rcount"/>
                </xsl:with-param>
                <xsl:with-param name="r">
                    <xsl:value-of select="$r"/>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:element>

        <xsl:element name="Grid.ColumnDefinitions">
            <xsl:call-template name="draw-cols">
                <xsl:with-param name="ccount">
                    <xsl:value-of select="$ccount"/>
                </xsl:with-param>
                <xsl:with-param name="c">
                    <xsl:value-of select="$c"/>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:element>

    </xsl:element>
</xsl:template>

<xsl:template name="draw-rows">
    <xsl:param name="rcount"/>
    <xsl:param name="r"/>

    <xsl:if test="$r &lt; $rcount">
        <xsl:element name="RowDefinition"/>
    </xsl:if>

    <xsl:if test="$r &lt; $rcount">
        <xsl:call-template name="draw-rows">
            <xsl:with-param name="r">
                <xsl:value-of select="$r  + 1"/>
            </xsl:with-param>
            <xsl:with-param name="rcount">
                <xsl:value-of select="$rcount"/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

<xsl:template name="draw-cols">
    <xsl:param name="ccount"/>
    <xsl:param name="c"/>

    <xsl:if test="$c &lt; $ccount">
        <xsl:element name="ColumnDefinition"/>
    </xsl:if>

    <xsl:if test="$c &lt; $ccount">
        <xsl:call-template name="draw-cols">
            <xsl:with-param name="c">
                <xsl:value-of select="$c  + 1"/>
            </xsl:with-param>
            <xsl:with-param name="ccount">
                <xsl:value-of select="$ccount"/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Результат, полученный с помощью MSXSL (26,8):

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
</Grid>
0 голосов
/ 29 июля 2011

Кажется, что это проблема с EditIx.

Этот код прекрасно работает в EditIx, если ваш файл XSLT версии 1.0 (см. Атрибут 'version' в верхней части файла).Этот код также отлично работает при использовании инструмента командной строки MSXML (текущая версия: 4.0).Кажется, есть проблемы с XSLT 2.0 в бесплатной версии EditIx с этим конкретным фрагментом кода.

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