[解決済み]
@IanRobertsのおかげで、ノード上でnormalize-space関数を使用して、それらが空かどうかを確認する必要がありました。
<xsl:if test="((node/ABC!='') and (normalize-space(node/DEF)='') and (normalize-space(node/GHI)=''))">
This worked perfectly fine.
</xsl:if>
[問題]
ノードの組み合わせが空かどうかを確認するxsl条件を作成しようとしています。私は以下の条件を試しましたが、それらは機能しません、誰もそれを機能させる方法についてのアイデアを持っていますか
<xsl:if test=" node/ABC!='' and node/DEF='' and node/GHI='' ">
This does not work
</xsl:if>
私も試しました
<xsl:when test="((node/ABC!='') and (node/DEF='') and (node/GHI=''))">
This does not work either..
</xsl:when>
また、試した
<xsl:if test="(node/ABC!='')>
<xsl:if test="(node/DEF='')>
<xsl:if test="(node/GHI='')">
Nope not working..
</xsl:if>
</xsl:if>
</xsl:if>
私は、その後、単一のxsl:if条件で試しましたが、以下は観察です
<xsl:if test="node/ABC!=''>
**This is working fine**
</xsl:if>
ただし、空の条件を検索しようとすると、つまり
<xsl:if test="node/ABC=''>
**This does not work**
</xsl:if>
また、==(double equal to)を試してみると、xsltエラーが発生します。すなわち
<xsl:if test="node/ABC==''>
***This gives a compilation error***
</xsl:if>
複数の条件をチェックするためにxsl:ifテストが機能する方法を理解するのを手伝いたいと思います。事前に感謝します。
[編集]:すべてのノードが空でないif条件が機能することをここで更新するだけで、空の3つのノードから他のノードをチェックしようとすると機能しません。
例えば:
<xsl:if test=" node/ABC!='' and node/DEF!='' and node/GHI!='' ">
This condition works perfectly fine.
</xsl:if>
@IanRobertsのおかげで、ノード上でnormalize-space関数を使用して、それらが空かどうかを確認する必要がありました。
<xsl:if test="((node/ABC!='') and (normalize-space(node/DEF)='') and (normalize-space(node/GHI)=''))">
This worked perfectly fine.
</xsl:if>
empty()
関数を使用してみてください。
<xsl:if test="empty(node/ABC/node()) and empty(node/DEF/node())">
<xsl:text>This should work</xsl:text>
</xsl:if>
これは、ABC
とDEF
が子ノードを持たないという意味で空であると識別します(要素、テキストノード、処理命令、コメントはありません)。
しかし、@ Ianが指摘したように、あなたの要素は本当に空ではないかもしれませんし、それが実際の問題ではないかもしれません-入力XMLがどのように見えるかを示しませんでした。
エラーの別の原因は、ツリー内の相対的なpositionである可能性があります。この条件のテスト方法は、周囲のテンプレートがnode
の親要素に一致する場合、またはnode
の親要素を反復処理する場合にのみ機能します。