Jak określić "not equals to" podczas porównywania łańcuchów w XSLT?

Obecnie mam xsl z następującym kodem, gdzie próbuję wydrukować "count" tylko wtedy, gdy nie jest równy N/A. ale wygląda na to, że "!=" nie działa.

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

Jednak działa, jeśli spróbuję porównać go z wartością liczbową.

Przykład:

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

Czy ktoś może mi powiedzieć: jeśli chciałbym porównać stringi, czego mogę użyć?

 65
Author: Daniel Haley, 2012-05-10

2 answers

Jak mówi Filburt; ale zauważ również, że zwykle lepiej jest napisać

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

Jeśli jest dokładnie jeden element Count oznaczają to samo, ale jeśli nie ma Count, lub jeśli jest kilka, to znaczenia są różne.

6 LATA PÓŹNIEJ

Ponieważ ta odpowiedź wydaje się być popularna, ale może być trochę tajemnicza dla niektórych czytelników, pozwól mi ją rozszerzyć.

" = "i"!= "operator w XPath może porównywać dwa zestawy wartości. Ogólnie, jeśli A i B są zbiór wartości, wtedy " = " zwraca true, jeśli istnieje jakakolwiek para wartości z A i B, które są równe, natomiast "!= "zwraca true, jeśli istnieje jakaś para, która jest nierówna.

W powszechnym przypadku, gdy A wybiera węzły zero-lub-jeden, A B jest stałą (powiedzmy "NA"), oznacza to, że not(A = "NA") zwraca true, jeśli A jest nieobecny lub ma wartość nie równą "NA". Natomiast A != "NA" zwraca true, jeśli A jest obecne i nie jest równe "NA". Zazwyczaj chcesz, aby przypadek" nieobecny "był traktowany jako "nie równy", co oznacza to not(A = "NA") jest odpowiednim sformułowaniem.

 106
Author: Michael Kay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 09:24:41

Jeśli chcesz porównać z ciągiem literalnym, musisz umieścić go w cudzysłowach (pojedynczych):

<xsl:if test="Count != 'N/A'">
 37
Author: Filburt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-10 13:35:01