次の変数を定義しました。
<xsl:variable name="pica036E"
select="recordData/record/datafield[@tag='036E']" />
<xsl:variable name="pica036F"
select="recordData/record/datafield[@tag='036F']" />
ここで、変数pica036Eが空でなく、pica036Fが空の場合に条件を実行する必要があります。それ以外の場合は、次のメッセージを表示します。それ以外の場合は別のメッセージを表示します。これが私のコードですが、出力はありません。 「nullまたはempty」は正しく定義されていますか?
<xsl:choose>
<xsl:when test="$pica036E != '' and $pica036F = ''">
<xsl:message>
036F no 036E yes
</xsl:message>
</xsl:when>
<xsl:otherwise>
<xsl:message>
036E no 036F yes
</xsl:message>
</xsl:otherwise>
</xsl:choose>
XPathでは、X = Yは(Xのペアx、Yのyがx = yを満たす場合)を意味し、X!= Yは(Xのペアx、Yのyがx!= yを満たす場合)を意味します。
これは、XまたはYのいずれかが空のシーケンスである場合、X = YとX!= Yの両方が偽であることを意味します。
たとえば、_$pica036E != ''
_は、長さがゼロの文字列ではない値が_$pica036E
_にあるかどうかをテストします。 _$pica036E
_に値がない場合、この条件を満たす値はありません。
その結果、XPathで!=を使用することは、常にコードの臭いです。通常、_X != Y
_ではなく、not(X = Y)
と書く必要があります。
XSLTでは、テキストコンテンツを含む変数をブール変数として使用することもできます。空でないコンテンツはtrueを意味し、空のコンテンツはfalseを意味します。
したがって、条件は次のように書くこともできます。
<xsl:when test="$pica036E and not($pica036F)">
not
は関数(演算子ではない)であることを忘れないでください。
次のコードを確認してください。あなたの出力は
<xsl:when test="not($pica036E = '') and $pica036F = ''">