1. ホーム
  2. xslt

[解決済み] XSLT <xsl:if> で文字列を比較するときに "not equals to" を指定するにはどうすればよいですか?

2022-02-07 12:03:16

質問

現在、以下のコードを含むxslがあり、以下の場合にのみ、"count"を出力しようとしています。 N/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>

しかし、数値で比較しようとするとうまくいきます。

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

どなたか教えてください:文字列を比較したい場合、何を使えばいいのでしょうか?

どのように解決するのですか?

フィルバートが言うように、しかし、通常、次のように書いた方が良いことに注意してください。

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

Count要素が1つだけなら同じ意味ですが、Countがなかったり、複数あったりすると意味が違ってきます。

6年後

この回答は人気があるようですが、読者によっては少し不可解かもしれませんので、拡大解釈させていただきます。

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

Aが0か1のノードを選択し、Bが定数(例えば"NA")である一般的なケースでは、これは次のことを意味します。 not(A = "NA") は、Aが存在しないか、"NA"と等しくない値を持つ場合に、真を返します。これに対して A != "NA" は、Aが存在し、かつ "NA" と等しくない場合に真を返します。通常、"absent" の場合は "not equal" として処理したいので、以下のようになります。 not(A = "NA") が適切な表現です。