Xpoint
   [напомнить пароль]

Небольшая проблемка с <xsl:choose>

Метки: [без меток]
2009-03-30 07:44:39 [обр] walek[досье]

Здравствуйте!

Возникла довольно странная проблема, по крайней мере для меня.

Есть XML узлы 2 видов:

<rss version="2.0">
  <channel>
    <description>"Ведомости", 24.03.2008, №52</description>
  </channel>
</rss>

и

<rss version="2.0">
  <channel>
    <description>"Ведомости", 15.08.2008, №152</description>
  </channel>
</rss>

Т.о. меняется только дата и номер (длина номера выпуска, №52 или №152 равное 2-м и 3-м соответственно).

В зависимости от длины номера выпуска в XSL прописываю условие:

<xsl:choose>
  <xsl:when test="string-length(substring(/rss/channel/description, 27, 2)) = 2">
    <a href="1.htm">
      <xsl:value-of select="title" disable-output-escaping="yes" />
    </a>
  </xsl:when>
  <xsl:when test="string-length(substring(/rss/channel/description, 27, 3)) = 3">
    <a href="2.htm">
      <xsl:value-of select="title" disable-output-escaping="yes" />
    </a>
  </xsl:when>
</xsl:choose>

На мой взгляд условие корректное.
Но, при вызове узла, в котором длина номера равна 3, т.е. 152, второе условие, т.е. ссылка 2.htm не выводится.

Где моя ошибка, не подскажите?
Спасибо.

спустя 3 минуты [обр] walek[досье]
Дополнение: ссылка 2.htm не то, что не выводится, вместо нее выводится 1.htm
спустя 57 минут [обр] walek[досье]

Простите, сделал глупо.

Изменил следующим образом:

<xsl:variable name="issueNum" select="normalize-space(substring-before(substring-after(/rss/channel/description, '№'),' ('))" >

и сравнивал так:

<xsl:when test="string-length($issueNum) = 1">

Тема закрыта.

спустя 1 час 22 минуты [обр] GRAy(64/259)[досье]
walek[досье] :)))) рассмешили ей богу... Почему вы считаете эту проверку корректной и что вообще ожидаете увидеть? Сейчас ваш код означает следующее:
Если отрезанные два символа от строки в узле /rss/channel/description составляют длину 2, то рисуем ссылку на 1.htm,
а если отрезанные три символа от строки в узле /rss/channel/description составляют длину 3, то рисуем ссылку на 2.htm.
Как по вашему первое условие может не выполниться? Ко всему прочему вы видимо не понимаете как работает xsl:choose - он не проверяет альтернативные условия, если одно уже подошло. RTFM уже наконец ;)
спустя 2 часа 7 минут [обр] walek[досье]
GRAy
простите, в первом варианте действительно глупо написал, переделал.
Powered by POEM™ Engine Copyright © 2002-2005