1

XSL:

<xsl:if test=".[foo or @bar]">
    something
</xsl:if>
  1. ターゲットに「foo」タグ名が付いているか、「bar」属性があるかどうかをテストしていますか?

  2. IEでしか動かないので、エラーが出ないか気になります。クロスブラウザーで動作するが、同等の文は何ですか?

4

3 に答える 3

2

この構文.[x]は、XSLT 1.0 では許可されていません。XSLT 1.0 の初期のドラフトでは許可されていましたが、意図的な設計上の決定ではなく、見落としの結果として、最終バージョンには含まれていなかったと思われます (すでに述べたように、XSLT 2.0 で復活しました)。IE は 1.0 仕様が確定する前に最初に XSLT プロセッサを出荷したため、初期のドラフトとの下位互換性のためにこの構文をサポートしている可能性があります。

于 2012-04-06T18:12:11.023 に答える
0

現在のノードにという名前の子要素があるかどうか、fooまたはという名前の属性があるかどうかをテストしますbar。つまり、次のように変更すると

<xsl:if test="foo or @bar">

使用する構文は、私のxslパーサーで拒否されます。Invalid XPath expression Unexpected token - "[foo or @bar]"

私が使用するものは、クロスブラウザで動作するはずです。名前または属性
を持つノードを選択する場合は、以下を使用します。foobar

<xsl:if test="name()='foo' or @bar">
于 2012-04-06T10:08:31.023 に答える
0
<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」を出力します

于 2012-04-06T12:22:08.633 に答える