web-dev-qa-db-ja.com

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>

[問題]

ノードの組み合わせが空かどうかを確認する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>
24
noobcode

@IanRobertsのおかげで、ノード上でnormalize-space関数を使用して、それらが空かどうかを確認する必要がありました。

<xsl:if test="((node/ABC!='') and (normalize-space(node/DEF)='') and (normalize-space(node/GHI)=''))">
  This worked perfectly fine.
</xsl:if>
22
noobcode

empty()関数を使用してみてください。

<xsl:if test="empty(node/ABC/node()) and empty(node/DEF/node())">
    <xsl:text>This should work</xsl:text>
</xsl:if>

これは、ABCDEFが子ノードを持たないという意味で空であると識別します(要素、テキストノード、処理命令、コメントはありません)。

しかし、@ Ianが指摘したように、あなたの要素は本当に空ではないかもしれませんし、それが実際の問題ではないかもしれません-入力XMLがどのように見えるかを示しませんでした。

エラーの別の原因は、ツリー内の相対的なpositionである可能性があります。この条件のテスト方法は、周囲のテンプレートがnodeの親要素に一致する場合、またはnodeの親要素を反復処理する場合にのみ機能します。

1
Mathias Müller