xslt сбрасывает нумерацию обратно на 1

#xslt

#xslt

Вопрос:

У меня 100 узлов сотрудников. Мне нужно сгенерировать xml, чтобы при достижении идентификатора 40 идентификатор сбрасывался на 1. Если идентификатор достигает 80, то идентификатор сбрасывается обратно на 1, и так далее. Я могу использовать цикл для каждого, и если mod 40 = 0, то вычтите 40, но я уверен, что есть лучшее решение. Ниже приведен мой пример

     <?xml version="1.0" encoding="UTF-8"?>
    <EmployeeDetails>
        <Employee id="1">
            <Name>TEST</Name>
        </Employee>
        <Employee id="2">
            <Name>TEST</Name>
        </Employee>
        <Employee id="3">
            <Name>TEST</Name>
        </Employee>
        <Employee id="4">
            <Name>TEST</Name>
        </Employee>
        <Employee id="5">
            <Name>TEST</Name>
        </Employee>
        .
        .
        .
        <Employee id="122">
            <Name>TEST</Name>
        </Employee>
    </EmployeeDetails>
  

и желаемый результат:

 <?xml version="1.0" encoding="UTF-8"?>
<EmployeeDetails>
    <Employee id="1">
        <Name>TEST</Name>
    </Employee>
    <Employee id="2">
        <Name>TEST</Name>
    </Employee>
    .
    .
    .
    <Employee id="40">
        <Name>TEST</Name>
    </Employee>
    <Employee id="1">
        <Name>TEST</Name>
    </Employee>
    <Employee id="2">
        <Name>TEST</Name>
    </Employee>
    ..
    .
    .

<Employee id="40">
        <Name>TEST</Name>
    </Employee> .
    .Employee id="1">
        <Name>TEST</Name>
    </Employee>.
    .
    .
    <Employee id="40">
        <Name>TEST</Name>
    </Employee>
    <Employee id="1">
        <Name>TEST</Name>
    </Employee>
    .Employee id="2">
        <Name>TEST</Name>
    </Employee>
</EmployeeDetails>
  

Не могли бы вы, пожалуйста, помочь?
Заранее большое спасибо.

Комментарии:

1. Пожалуйста, опубликуйте также свой xslt. Спасибо.

Ответ №1:

 <xsl:value-of select="((position() - 1) mod 40)   1"/>
  

начинается с 1 .. 40 (включительно), а затем снова начинается с 1.

Конечно, вы можете использовать в качестве основы какое-либо другое число, отличное от position() .

Комментарии:

1. Когда правильная скобка была установлена, она начала работать

2. <xsl: имя переменной=»d» select=»((позиция() — 1) mod 40) 1″/>

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