Я пытаюсь реализовать код php logi c в XSLT.
Структура xml выглядит как
Ввод:
<parent>
<child>
<id>1</id>
<value>11</value>
</child>
<child>
<id>2</id>
<value>22</value>
</child>
<child>
<id></id>
<value>22</value>
</child>
<child>
<id></id>
<value>00</value>
</child>
<child>
<id></id>
<value>00</value>
</child>
<parent>
Код sudo в php (logi c) I Я пытаюсь реализовать в XSLT следующее:
var Index = 1;
for each "child"{
if( "id" is not empty ){
Index += "id" + 1;
}else{
if( previous "value" == current "value" ){
"id" = Index;
Index++;
}else{
"id" = 1;
Index = 2;
}
}
}
Как я понимаю, в XSLT у нас не может быть счетчика / переменной, которую мы можем обновлять на каждой итерации. Я считаю, что могу использовать preceding-sibling
для сравнения предыдущего значения с текущим значением, но как рассчитать индекс в этой точке? Я могу использовать XSLT 2.0, если это облегчает / упрощает.
Есть идеи?
Вывод после преобразования должен выглядеть следующим образом:
Вывод:
<parent>
<child>
<id>1</id>
<value>11</value>
</child>
<child>
<id>2</id>
<value>22</value>
</child>
<child>
<id>6</id> <!-- "id" = "Index" calculated so far, since current value (22) = previous value (22) -->
<value>22</value>
</child>
<child>
<id>1</id> <!-- "id" = 1 since current value (00) != previous value (22) -->
<value>00</value>
</child>
<child>
<id>2</id> <!-- "id" = "Index" calculated so far, since currnet value (00) = previous value (00) -->
<value>00</value>
</child>
<parent>