¿Cómo puedo especificar "no es igual a" al comparar cadenas en un XSLT ?

Actualmente tengo un xsl con el siguiente código donde I'm tratando de imprimir "count" sólo si no es igual a N/A. pero parece que "!=" no está funcionando.

<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>

Sin embargo, funciona si intento compararlo con un valor numérico.

Ejemplo:

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

Alguien me puede decir: Si quiero comparar cadenas ¿qué puedo usar?

Solución

Como dice Filburt; pero también tenga en cuenta que suele ser mejor escribir

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

Si hay exactamente un elemento Count significan lo mismo, pero si no hay Count, o si hay varios, entonces los significados son diferentes.

6 AÑOS DESPUÉS

Como esta respuesta parece haberse hecho popular, pero puede resultar un poco críptica para algunos lectores, permítanme ampliarla.

El "=" y "!=" operador en XPath puede comparar dos conjuntos de valores. En general, si A y B son conjuntos de valores, entonces "=" devuelve verdadero si hay cualquier par de valores de A y B que son iguales, mientras que "!=" devuelve verdadero si hay cualquier par que son desiguales.

En el caso común en el que A selecciona nodos cero o uno, y B es una constante (digamos "NA"), esto significa que not(A = "NA") devuelve verdadero si A está ausente, o tiene un valor no igual a "NA". Por el contrario, A != "NA" devuelve verdadero si A está presente y no es igual a "NA". Normalmente se desea que el caso "ausente" se trate como "no igual", lo que significa quenot(A = "NA")` es la formulación adecuada.

Comentarios (0)

Si desea comparar con un literal de cadena, debe colocarlo entre comillas (simples):

Comentarios (2)