Как сохранить значение переменной и обновить его в XSLT - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть атрибут с именем ID, который увеличивается на 1 каждый раз, когда ему присваивается значение. У меня есть ситуация, когда значение будет увеличиваться при каждом входе в цикл. Внешний цикл имеет 2 записи, а внутренний цикл - 3 записи.

Внешний цикл 1 - Внутренний цикл 1, 2 и 3, атрибут ID увеличивается на 1, 2 и 3, но

Внешний цикл 2 - Внутренний цикл .... снова атрибут ID начинается с 1. Мне нужно, чтобы это было 4, 5 и т. Д.

Этот идентификатор приращения не имеет данных, относящихся к входному XML-файлу. Вся обработка должна быть выполнена в XSLT.

XSLT-файл:

<xsl:variable name="localISYMPid" select="0"/>  
<xsl:element name="Test1">   

    <xsl:for-each select="Solutions/Solution">

        <xsl:if test="Observations/Observation!= ''  ">

            <xsl:for-each select="Observations/Observation">
                <xsl:element name="Roles">

                    <!-- Generating the ID value -->
                    <xsl:variable name="ids" select="generate-id(.)"/>
                    <!-- ***************************-->

                    <xsl:attribute name="CK"><xsl:value-of select="substring-after($ids,'Solution')"/></xsl:attribute>
                    <xsl:attribute name="ID"><xsl:value-of select="position() + $localISYMPid "/></xsl:attribute>
                </xsl:element>
            </xsl:for-each>
        </xsl:if>
    </xsl:for-each>
</xsl:element>

Пожалуйста, помогите мне распечатать значение идентификатора 4, например, когда внутренний цикл зациклен 3 раза для внешнего цикла 1 и для внешнего цикла 2, а когда внутренний цикл равен 1, значение идентификатора должно быть 4. Как сейчас, его печать 1 снова ..

ID     1
ID     2
ID     3
----------
ID     1(it should print 4)

Я использую XSLT 1.0

Спасибо, Ramm

Ответы [ 2 ]

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

Всегда полезно показать ваш исходный документ. Но я подозреваю, что вы можете достичь того, что вы хотите с чем-то вроде

<xsl:attribute name="ID">
  <xsl:number level="any" from="Solution"/>
</xsl:attribute>
0 голосов
/ 14 апреля 2011

Вы используете функцию position() для определения идентификатора, который является локальным для его родительского элемента (Observation в данном случае).Если вы действительно хотите глобальный, вы можете вместо этого сделать что-то вроде count(preceding::Roles) + 1, который будет подсчитывать все Roles узлов до текущего, а затем добавлять один.

Возможно, вам придется ограничить preceding::Roles предикат немного дальше в зависимости от ваших требований, таких как, например, preceding::Roles[parent::Observation], чтобы убедиться, что вы учитываете только элементы Roles, которые являются дочерними для элемента Observation.

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