web-dev-qa-db-ja.com

XSLT <xsl:if>の文字列を比較するときに「等しくない」を指定するにはどうすればよいですか?

現在、次のコードを含むxslがあり、N/Aと等しくない場合にのみ "count"を出力しようとしています。 "!="が機能していないようです。

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

ただし、数値と比較しようとすると機能します。

例:

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

誰か教えてもらえますか?文字列を比較したい場合、何を使用できますか?

60
Maxyie

Filburtが言うように。ただし、通常は次のように書くことをお勧めします。

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

Count要素が1つだけの場合、それらは同じことを意味しますが、Countがない場合、または複数ある場合、意味は異なります。

6年後

この回答は一般的になったように見えますが、一部の読者にとっては少しわかりにくいかもしれませんので、拡大させてください。

XPathの「=」および「!=」演算子は、2つの値セットを比較できます。一般に、AとBが値のセットである場合、「=」はAとBの値のペアが等しい場合にtrueを返し、「!=」は等しくないペアがある場合にtrueを返します。

Aがゼロまたは1ノードを選択し、Bが定数(「NA」など)である一般的なケースでは、これは、Aが存在しないか、値が「NA」に等しくない場合、not(A = "NA")がtrueを返すことを意味します。対照的に、A != "NA"は、Aが存在し、 "NA"と等しくない場合にtrueを返します。通常、「不在」の場合は「等しくない」として扱われます。つまり、not(A = "NA")が適切な定式化です。

83
Michael Kay

文字列リテラルと比較する場合は、(単一の)引用符で囲む必要があります。

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