xslt: если как проверить булевы значения - PullRequest
14 голосов
/ 13 января 2010

Я не могу найти способ проверить, является ли значение элемента "истинным" или "ложным".

Это логическое значение, преобразованное из набора данных. Когда я выбираю значение, я вижу, что это либо «true», либо «false», но мой тест не дает ожидаемого поведения. (всегда неверно.) Я попробовал почти все, это мое первое приложение xslt, поэтому помощь приветствуется.

      <xsl:if test="ispassive">
        <tr>
          <td>
            <em>pasif değil</em>
            <hr></hr>
          </td>
        </tr>
      </xsl:if>

Ответы [ 3 ]

18 голосов
/ 13 января 2010

После публикации здесь я понял, что мой <xsl:if> тест был вне моей <xsl:for-each> петли.

После изменения условий <xsl:if> я обнаружил, что это работает для меня.

        <xsl:if test="ispassive='true'">
          <tr>
            <td>
              <em>pasif</em>
              <hr></hr>
            </td>
          </tr>
        </xsl:if>

Сравнение оцененного строкового значения элемента ispassive с 'true' работает нормально (что я пробовал раньше, но из-за того, что я поместил его в xslt, он всегда терпел неудачу, потому что не смог выбрать ispassive элемент для оценки его стоимости.

13 голосов
/ 13 января 2010

В зависимости от того, как вы представляете свои логические значения, может быть много вещей, как будут выглядеть ваши данные?

Наиболее вероятный сценарий: ложь представляется как 0, а истина может быть любым значением, отличным от 0.

<xsl:if test="$myvalue = 0">
    -- output if false --
</xsl:if>

но вы, вероятно, лучше используете xsl: выберите

<xsl:choose>
    <xsl:when test="$myvalue = 0">
        -- output if false --
    </xsl:when>
    <xsl:otherwise>
        -- output if true --
    </xsl:otherwise>
</xsl:choose>

Вы можете не указывать иное, если вам это не нужно.

10 голосов
/ 13 января 2010

Этот xslt ищет узел в текущем контексте, который называется ispassive.

Так что, если ваш XML

<Root>
   <ispassive />
</Root>

Ты станешь правдой. Как правило, вы должны указать xpath для значения, которое вы хотите проверить. Так что, если ваш XML

<Root>
      <Node ispassive="true"/>
</Root>

и вы замените

<xsl:if test="ispassive">

с

<xsl:if test="//@ispassive = 'true'">

Ваша таблица стилей будет работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...