XSL:では、<xsl:if test = "。[foo or @bar]">とは何か、クロスブラウザソリューションとは何ですか?
<xsl:if test=".[foo or @bar]">
something
</xsl:if>
それがあれば、ターゲットが 'foo' でタグ名であるか 'バー' 属性を持っていることをテストしていますか?
IEでのみ動作します。エラーがあるのでしょうか?同等の文は何ですか?しかし、クロスブラウザで動作しますか?
XSL:では、<xsl:if test = "。[foo or @bar]">とは何か、クロスブラウザソリューションとは何ですか?
<xsl:if test=".[foo or @bar]">
something
</xsl:if>
それがあれば、ターゲットが 'foo' でタグ名であるか 'バー' 属性を持っていることをテストしていますか?
IEでのみ動作します。エラーがあるのでしょうか?同等の文は何ですか?しかし、クロスブラウザで動作しますか?
<xsl:if test=".[foo or @bar]"> something </xsl:if>
を、これは構文的に無効であり、エラーを生成します。 XSLT 2.0で
このと等価である:
<xsl:if test="foo or @bar">
something
</xsl:if>
式:
foo or @bar
コンテキストノード(現在のノード)という名前の子要素を有する正確場合true()
と評価foo
またはコンテキストノードには、bar
(またはその両方)という名前の属性があります。
これ以外の場合、この式はfalse()
と評価されます。その後、出力文字列「何か」
foo
という名前の子要素を持っているか、現在のノードが
bar
という名前の属性を持っています
したがって、上記のコードの意味:これらの条件のいずれかに該当する場合
これは、現在のノードがfoo
という名前の子要素を持っているか、bar
と呼ばれる属性を持っているかどうかをテストします。それはあなたが
<xsl:if test="foo or @bar">
あなたは私のXSLパーサに拒否された使用する構文に変更した場合、次のとおりです。Invalid XPath expression Unexpected token - "[foo or @bar]"
私はクロスブラウザを使用して動作するはずです1。
名前foo
またはbar
属性を持つノードを、選択したい場合は、次のようにします。XSLT 1.0で
<xsl:if test="name()='foo' or @bar">
私はそれがエラーだと思っていましたが、IE6はそれを無視するほど強いです。あなたの詳細な説明をありがとう。 – gfaceless
構文.[x]
は、XSLT 1.0では使用できません。 XSLT 1.0の初期のドラフトでは許可されていましたが、意図的な設計の決定ではなく、見落としの結果として最終版に欠けていたと思われます(すでに述べたように、XSLT 2.0では復活しました)。 1.0仕様が完成する前にIEが最初にXSLTプロセッサを出荷したため、初期のドラフトとの下位互換性のためにこの構文をサポートする可能性があります。
soそれが歴史です。 – gfaceless
XSLT 2.0です。そのため、ブラウザ間に矛盾があります。どうもありがとう。 – gfaceless
@gfaceless:*現在、すべての*ブラウザはXSLT 1.0のみを使用しています。おそらくIE6のXSLTプロセッサにバグがあります。とにかく、すべては 'fooまたは@ bar'を受け入れるべきです - これは、同じxブラウザの動作を保証するための修正です。ところで、あなたはそれの隣のチェックマークをクリックすることで、最も役に立つ答えを受け入れるかもしれません: –
私はそのことを知らなかったし、チェックマーク: – gfaceless