web-dev-qa-db-fra.com

Comment spécifier "pas égal à" lors de la comparaison de chaînes dans un XSLT <xsl: if>?

Actuellement, j'ai un xsl avec le code suivant où j'essaie d'imprimer le "compte" uniquement s'il n'est pas égal à N/A. mais semble comme "!=" ne fonctionne pas.

<xsl:for-each select="Directory/Match">
    <xsl:if test = "Count != N/A">
        <tr>
            <td><xsl:value-of select="@bookName" /></td>
            <td><xsl:value-of select="@AuthorName" /></td>
            <td><xsl:value-of select="Count" /></td>
        </tr>
    </xsl:if>
</xsl:for-each>

Cependant, cela fonctionne si j'essaie de le comparer avec une valeur numérique.

Exemple:

<xsl:if test = "Occurrances != 0">

Quelqu'un peut-il me dire s'il vous plaît: Si je veux comparer des chaînes, que puis-je utiliser?

60
Maxyie

Comme dit Filburt; mais notez également qu'il est généralement préférable d'écrire

test="not(Count = 'N/A')"

S'il y a exactement un élément Count, ils veulent dire la même chose, mais s'il n'y a pas de Count, ou s'il y en a plusieurs, les significations sont différentes.

6 ANS PLUS TARD

Puisque cette réponse semble être devenue populaire, mais peut-être un peu cryptique pour certains lecteurs, laissez-moi la développer.

Les opérateurs "=" et "! =" Dans XPath peuvent comparer deux ensembles de valeurs. En général, si A et B sont des ensembles de valeurs, alors "=" renvoie vrai s'il existe une paire de valeurs de A et B égale, alors que "! =" Renvoie vrai si une paire quelconque était inégale.

Dans le cas habituel où A sélectionne les nœuds zéro ou un et que B est une constante (par exemple, "NA"), cela signifie que not(A = "NA") renvoie true si A est absent ou a une valeur différente de à "NA". En revanche, A != "NA" Renvoie vrai si A est présent et différent de "NA". Habituellement, vous souhaitez que le cas "absent" soit traité comme "non égal", ce qui signifie que not(A = "NA") est la formulation appropriée.

83
Michael Kay

Si vous souhaitez comparer un littéral de chaîne, vous devez le mettre entre guillemets (simples):

<xsl:if test="Count != 'N/A'">
32
Filburt