71

現在、次のコードを含む xsl があり、「カウント」が と等しくない場合にのみ出力しようとしてい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">

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

4

2 に答える 2

116

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

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

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

6年後

この回答は一般的になっているようですが、一部の読者には少しわかりにくいかもしれないので、拡張させてください。

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

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

于 2012-05-10T15:02:55.117 に答える
39

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

<xsl:if test="Count != 'N/A'">
于 2012-05-10T13:35:01.163 に答える