Как увеличить целочисленную переменную XSL - PullRequest
3 голосов
/ 31 октября 2011

Обновлено

У меня есть огромные данные, которые становятся большой таблицей, скажем, родительский стол

каждая строка родительского элемента строка будет соответствовать другой таблице (код приведен ниже), скажем дочерний элемент таблицы То есть, когда какой-либо конкретный столбец из родительского элемента таблицы строка при щелчке (гиперссылке) происходит переход к этой части таблицы дочерний элемент таблицы

, поэтому мне нужен счетчик, чтобы различать каждый дочерний стол . Пожалуйста, помогите мне разобраться с этой проблемой. Спасибо

<xsl:choose>
    <xsl:variable name="counter" as="xs:integer"/>
    $counter=0      <!--here i am assigning 0-->
    <xsl:when test="DBInfo/ORSDBInfo/ORSReposTableTypeInd1/ORSReposColumAllWithTableTypeInd1/@ColumnNm">
        <dd>
            <xsl:for-each select="DBInfo/ORSDBInfo/ORSReposTableTypeInd1">
                <div class="horz">
                <a name="_ORS$counter" href="#_top">ORSReposColumAllWithTableTypeInd1:<xsl:value-of select="$counter"/> </a>
                <table border="1">          <!--above I am using counter to print-->
                    <tbody>
                        <tr>
                            <th>Creator</th>
                            <th>LastUpdate</th>
                            <th>UpdatedBy</th>
                        </tr>
                <xsl:for-each select="ORSReposColumAllWithTableTypeInd1">
                    <tr>
                        <td><xsl:value-of select="@Creator"/></td>
                        <td><xsl:value-of select="@LastUpdate"/></td>
                        <td><xsl:value-of select="@UpdatedBy"/>
                    </tr>
                </xsl:for-each>
                    </tbody>
                </table>
            </div>
            $counter=$counter+1     <!--Counter is incremented-->
            <br/>
            </xsl:for-each>
        </dd>
    </xsl:when>
    <xsl:otherwise>
    </xsl:otherwise>
</xsl:choose>

Дополнительные обновления

Так что после обращения к ответу Уилфреда я придумал

<a name="_ORS" href="#_top">ORSReposColumAllWithTableTypeInd1_<xsl:number value="position()" format="1" /></a>

но теперь, как использовать его внутри <a name="_ORS", чтобы я получил _ORS1, _ORS2, _ORS3 и так далее ...

Ответы [ 4 ]

3 голосов
/ 31 октября 2011

Используйте position().Так как вы увеличиваете это один раз для каждого, почему бы вам просто не использовать position()?

<a name="_ORS$counter" href="#_top">ORSReposColumAllWithTableTypeInd1:<xsl:value-of select="position()"/> </a>
2 голосов
/ 31 октября 2011

Как насчет использования:

<xsl:number/>

См. http://www.w3.org/TR/xslt#number

Существуют различные способы включения его в качестве атрибутов в тег привязки.

Параметр1: Использование переменных

<xsl:variable name="number">
  <xsl:number/>
</xsl:variable>
<a name="{$number}">blabla</a>

Опция 2: xsl: attribute

<a>
  <xsl:attribute name="name">
    <xsl:number/>
  </xsl:attribute>
</a>
1 голос
/ 31 октября 2011

Понятие приращения чуждо XSLT как функциональному языку. Однако вы можете просто посчитать количество предыдущих элементов:

<xsl:value-of select="count(preceding-sibling::ORSReposTableTypeInd1)"/>

В зависимости от макета вашего документа это может быть сложнее, ваш пробег может варьироваться.

0 голосов
/ 04 декабря 2012

У меня та же проблема, и самый простой способ ее решения - использовать Saxon.Здесь вы можете найти мое решение Увеличение и проверка переменной счетчика в XSLT

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