EXSLT は、XSLT に一連の便利な拡張機能を提供します。おそらくほとんどの人が exslt:node-set 関数を使ったことがあるでしょう。EXSLT によって指定される他の関数の 1 つは、「exslt:object-type」です。残念ながら、ほとんどのブラウザー (Firefox を除く) はこの機能をサポートしていないようです。参照: http://greenbytes.de/tech/tc/xslt/ スクリプトを使用して IE でこの機能を実装することはできましたが、Google Chrome の回避策が見つからないようです。(これは、IE が Chrome よりも優れていると思われる場合の 1 つです)。
私のアプリケーションの主な目的は、引数が「ノード セット」であるかどうかを調べることです。または、より正確に言うと、xsl:apply-templates で引数を選択できる場合。
IE の実装は次のようになります。
<msxso:script language="JScript" implements-prefix="exslt">
<![CDATA[
this['object-type'] = function(x) {
スイッチ (x の型) {
case "number": return "number";
case "string": return "string";
case "object": return "node-set";
デフォルト: x の型を返す
}
}
]]>
</msxso:スクリプト>
問題は、Google Chrome で同様のことを行う方法です。
これは完全に自動化されたプロセスであると想定されているため、解決策はソース スタイルシートを手動で書き直すことではないことを理解してください。
私のシナリオは次のとおりです。エージェントが XML + XSLT を送信すると、プロセスは XSLT を自動的に書き換えて、xsl:value-of を xsl:apply-templates に変換します。xsl:value-of の select 属性のタイプは問題ではありませんが、select 属性をノードセットに解決できない場合、xsl:apply-templates は失敗します。