Если у меня есть структура xml:
<a>
<b>
<isRed> 0 </isRed>
<name> Joe </name>
</b>
<b>
<isRed> 1 </isRed>
<name> Bob </name>
</b>
<isRed> 1 </isRed>
<name> Charles </name>
</b>
<isRed> 1 </isRed>
<name> Tiffany </name>
</b>
<isRed> 0 </isRed>
<name> John </name>
</b>
</b>
<isRed> 0 </isRed>
<name> Tim </name>
</b>
</a>
При итерации по этим узлам в цикле for-each как получить их позицию WITH RESPECT с условием: [isRed = '1'].Например, если бы я перебирал
<xsl:for-each select="a/b[isRed = '1']>
Как бы получить текущую позицию () для Чарльза, равную 2 вместо 3?(Поскольку узел B с Чарльзом в нем является вторым узлом, который соответствует условию for-each. Прямо сейчас, когда я нахожусь в контексте цикла for-each, если я использую position (), я получаю позициюданного узла с контекстом всего списка узлов, а это не то, что мне нужно (мне нужно сделать так, чтобы xml трансформировался в html, чтобы первые две из isRed = 1 были на первой странице, а затем остальныеразмещены на отдельных страницах).
Кроме того, я не использую сопоставление с шаблоном, а с именами шаблонов. Я пытался выяснить это в течение дня или около того, и я просто нес любым успехом.
По сути, я пытаюсь зациклить только первые два элемента в списке в цикле foreach. Мой фактический цикл for-each выглядит так:
<xsl:for-each select="a/b[isRed = '1' and position() < 3]">
Тем не менее, это только итерация по узлу Джо и Боба, когда я хочу, чтобы он повторялся по узлам Боба и Чарльза Б. Это потому, что Джо (и все другие узлы b независимо от их атрибута isRed или нет) включеныn проверка позиции для каждого условия.Что я мог бы использовать вместо вызова position (), чтобы получить фактическую позицию для узлов, которые удовлетворяют условию isRed?