2010-01-13 12 views
13

Non riesco a trovare un modo per verificare se il valore di un elemento è "vero" o "falso".xslt: se verificare i valori booleani

È booleano, convertito da un set di dati. Quando seleziono il valore, vedo che è "vero" o "falso", ma il mio test non ottiene il comportamento previsto. (è sempre falso). Ho provato quasi tutto, questa è la mia prima applicazione xslt, quindi l'aiuto è apprezzato.

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

Cosa significa "passivo"? È un valore per un attributo? È un attributo che può o non può essere presente? –

+0

thx per le risposte, sembra che abbia posto il conditon in errore, ecco perché test = "ispassive = 'true'" funziona nel mio caso – hazimdikenli

+0

Qualcosa da considerare per le domande future: ti riferivi ad un ** a valore ttribute **, ma in realtà stavano valutando un ** elemento ** e il suo valore di testo calcolato. La tua descrizione non corrispondeva esattamente al tuo problema e sarebbe stato più facile per noi aiutarti a diagnosticare il problema se avessi pubblicato un piccolo esempio XML e altro dell'XSLT. –

risposta

11

A seconda di come rappresenti i tuoi valori booleani potrebbero essere un sacco di cose, come sono i tuoi dati?

Lo scenario più probabile, false è rappresentato da 0 e true può essere qualsiasi valore diverso da 0.

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

ma è molto probabile che meglio di utilizzare xsl: choose

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

si può tralasciare l'altrimenti, se non ne hai bisogno.

9

Questo xslt sta cercando un nodo nel contesto corrente denominato ispassive.

Così, se il XML è

<Root> 
    <ispassive /> 
</Root> 

Otterrete vero. In generale, è necessario specificare un percorso x sul valore che si desidera controllare. Così, se il XML è

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

e si sostituisce

<xsl:if test="ispassive"> 

con

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

Il tuo foglio di stile funzionerà come previsto.

16

Dopo aver pubblicato qui mi sono reso conto che il test my <xsl:if> era fuori dal mio ciclo <xsl:for-each>.

Dopo aver riposizionato le condizioni <xsl:if>, ho scoperto che questo funziona per me.

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

Confrontando il valore stringa valutato dell'elemento ispassive a 'vero' funziona bene, (che avevo provato prima, ma perché ho smarrito nel XSLT, era sempre fallendo perché non è riuscito a selezionare il ispassive elemento per valutare il suo valore

+0

Il tuo test originale stava verificando la presenza di un elemento 'ispassive', indipendentemente dal suo valore. Quindi, fintanto che c'era un regalo, sarebbe ritornato 'true()'.Cambiando il test per valutare il ** valore ** dell'elemento 'ispassive', restituisce solo' true() 'se il valore è" true ". –

Problemi correlati