XSL:
<xsl:if test=".[foo or @bar]">
something
</xsl:if>
ターゲットに「foo」タグ名が付いているか、「bar」属性があるかどうかをテストしていますか?
IEでしか動かないので、エラーが出ないか気になります。クロスブラウザーで動作するが、同等の文は何ですか?
XSL:
<xsl:if test=".[foo or @bar]">
something
</xsl:if>
ターゲットに「foo」タグ名が付いているか、「bar」属性があるかどうかをテストしていますか?
IEでしか動かないので、エラーが出ないか気になります。クロスブラウザーで動作するが、同等の文は何ですか?
この構文.[x]
は、XSLT 1.0 では許可されていません。XSLT 1.0 の初期のドラフトでは許可されていましたが、意図的な設計上の決定ではなく、見落としの結果として、最終バージョンには含まれていなかったと思われます (すでに述べたように、XSLT 2.0 で復活しました)。IE は 1.0 仕様が確定する前に最初に XSLT プロセッサを出荷したため、初期のドラフトとの下位互換性のためにこの構文をサポートしている可能性があります。
現在のノードにという名前の子要素があるかどうか、foo
またはという名前の属性があるかどうかをテストしますbar
。つまり、次のように変更すると
<xsl:if test="foo or @bar">
使用する構文は、私のxslパーサーで拒否されます。Invalid XPath expression
Unexpected token - "[foo or @bar]"
私が使用するものは、クロスブラウザで動作するはずです。名前または属性
を持つノードを選択する場合は、以下を使用します。foo
bar
<xsl:if test="name()='foo' or @bar">
<xsl:if test=".[foo or @bar]"> something </xsl:if>
XSLT 1.0では、これは構文的に無効であり、エラーが発生します。
XSLT 2.0では、これは次と同等です。
<xsl:if test="foo or @bar">
something
</xsl:if>
式:
foo or @bar
true()
コンテキストノード(現在のノード)に名前付きの子要素がある場合、foo
またはコンテキストノードに名前付きの属性がある場合bar
(またはその両方)に正確に評価されます。
それ以外の場合、この式はに評価されfalse()
ます。
したがって、上記のコードスニペットは次のことを意味します。これらの条件のいずれかが当てはまる場合:現在のノードにという名前の子要素があるfoo
か、現在のノードに-という名前の属性がある場合はbar
、文字列「something」を出力します