2012-05-10 7 views
47

現在、私は次のコードでxslを持っています。N/Aと等しくない場合にのみ、「カウント」をプリントしようとしています。 "!="が機能していないようです。XSLT内の文字列を比較するときに「等しくない」と指定するにはどうすればいいですか<xsl:if>?

<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

をFilburtが言うように、だけでなく、それはまさにその意味1つのカウント要素と同じものがあるかどう

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

を書くために通常より良いですが、何のカウントはありません場合は、いくつか存在する場合、または、その意味が異なっていることに注意してください。

6年後

この回答が人気となっているようだが、一部の読者にはほとんど不可解な場合もありますので、私はそれを拡張してみましょう。

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

Aが0または1のノードを選択し、Bが定数(たとえばNA)である一般的なケースでは、not(A = "NA")は、Aが存在しないか、 NA "である。対照的に、A != "NA"は、Aが存在し、 "NA"に等しくない場合に真を返す。通常、「不在」の場合は「等しくない」と扱います。つまり、not(A = "NA")が適切な形式です。

28

あなたが(シングル)で、それを配置する必要があり、文字列リテラルに比較したい場合は、引用符:

<xsl:if test="Count != 'N/A'"> 
+0

ご支援いただきありがとうございます。一重引用符は機能します。 :) – Maxyie

+3

おそらく、引用符が必要であるということを追加する価値があるかもしれません。なぜなら、テストはそれらがなければ完全に意味があるからです。しかし、その場合、 'Count'子要素の値が' A 'N'子要素の子要素です。 –

関連する問題