В пределах - PullRequest
       12

В пределах

0 голосов
/ 01 декабря 2018

Если у меня есть структура 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() &lt; 3]"> 

Тем не менее, это только итерация по узлу Джо и Боба, когда я хочу, чтобы он повторялся по узлам Боба и Чарльза Б. Это потому, что Джо (и все другие узлы b независимо от их атрибута isRed или нет) включеныn проверка позиции для каждого условия.Что я мог бы использовать вместо вызова position (), чтобы получить фактическую позицию для узлов, которые удовлетворяют условию isRed?

...