2010-01-13 22 views
13

No puedo encontrar una manera de verificar si el valor de un elemento es "verdadero" o "falso".xslt: si cómo probar los valores booleanos

Es booleano, convertido a partir de un conjunto de datos. Cuando selecciono el valor, veo que es "verdadero" o "falso", pero mi prueba no obtiene el comportamiento esperado. (siempre es falso.) Intenté casi todo, esta es mi primera aplicación xslt, así que la ayuda es apreciada.

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

¿Qué significa pasivo? ¿Es un valor para un atributo? ¿Es un atributo que puede o no estar presente? –

+0

thx para las respuestas, parece que extravíe la condición si, por eso estaba fallando. test = "ispassive = 'true'" funciona en mi caso – hazimdikenli

+0

Algo a considerar para futuras preguntas: Usted se estaba refiriendo a un ** a ttribute ** value, pero en realidad estaban evaluando un ** elemento ** y su valor de texto calculado. Su descripción no coincidía exactamente con su problema y habría sido más fácil para nosotros ayudarlo a diagnosticar el problema si hubiera publicado un pequeño XML de ejemplo y más de XSLT. –

Respuesta

11

Dependiendo de cómo represente sus booleanos, podría tratarse de muchas cosas, ¿cómo son sus datos?

Escenario más probable, falso se representa como 0 y verdadero podría ser cualquier valor que no sea 0.

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

pero lo más probable es mejor de usar xsl: choose

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

Usted puede dejar de lado el contrario, si no lo necesita.

9

Este xslt está buscando un nodo en el contexto actual llamado ispassive.

Así que si su xml es

<Root> 
    <ispassive /> 
</Root> 

Obtendrá cierto. En general, debe especificar un xpath al valor que desea verificar. Así que si su xml es

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

y reemplazar

<xsl:if test="ispassive"> 

con

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

su hoja de estilo funcionará como se espera.

16

Después de publicar aquí me di cuenta de que mi prueba <xsl:if> estaba fuera de mi circuito <xsl:for-each>.

Después de reposicionar las condiciones <xsl:if>, descubrí que esto funciona para mí.

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

Comparando el valor de cadena evaluada del elemento ispassive a 'verdadero' funciona bien, (que yo había intentado antes, sino porque me extravié en el XSLT, que siempre estaba fallando porque no pudo seleccionar la ispassive elemento para evaluar su valor

+0

El criterio de prueba original fue verificar la presencia de un elemento 'ispassive', independientemente de su valor. Entonces, mientras haya un presente, devolverá 'true()'.Al cambiar la prueba para evaluar el ** valor ** del elemento 'ispassive', solo devuelve' true() 'si el valor es" verdadero ". –

Cuestiones relacionadas