|
|
|
новичок
      
участник
Last Login: 04.03.2004 11:52
Сообщ.: 4,
Visits: 45
|
|
Привет всем.
У меня есть такой вопрос: Есть XML-документ вида: <list> <item1>content</item1> <item2>content</item2> .... <itemn>content</itemn> </list>
Как в стилевой таблице XSLT разделить обработку элементов, дочерних по отношению к <list>, по критерию четности номера их позиции в контексте? То есть, фактически, проблема заключается в определении четности и нечетности позиций элементов.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Можно использовать функцию position() и проверять ее значение на четность - 0 = (position() mod 2). Этот способ подходит при одноворменной обработке все дочерних элементов и не будет работать если выбирать не все узлы. Причина в том что position() возвращает позицию текущего элемента (начиная с единицы) в текущем списке элементов.
Если бы будете использовать узлы с его порядковым номером, то используйте функцию substring-after. Вот небольшой пример:<xsl:choose> <xsl:when test="0 = (substring-after(name(), 'item') mod 2)">Четный</xsl:when> <xsl:otherwise>Нечетный</xsl:otherwise> </xsl:choose>
|
|
|
|
|
новичок
      
участник
Last Login: 04.03.2004 11:52
Сообщ.: 4,
Visits: 45
|
|
| Спасибо! Первый вариант мне как раз очень даже подходит.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 17.04.2008 14:50
Сообщ.: 640,
Visits: 7 047
|
|
Достаточно написать
test="position() mod 2 = 0"
Необходимость использовать пронумерованные имена отпадает...
|
|
|
|