Xslt: если для проверки булевых значений

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

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

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

Ответы

Ответ 1

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

Скорее всего сценарий, false представляется как 0, а true может быть любым значением не 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>

Если вы не нуждаетесь в этом, вы можете отказаться от него.

Ответ 2

После публикации здесь я понял, что мой тест <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 чтобы оценить его значение.

Ответ 3

Этот xslt ищет node в текущем контексте, называемом ispassive.

Итак, если ваш xml

<Root>
   <ispassive />
</Root>

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

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

и вы замените

<xsl:if test="ispassive">

с

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

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