この質問に関連して、xsl:key内で変数を使用することは可能ですか?私はこのようなsmthをしたい:
<xsl:key name="ChargesKey" match="$ChargesForDisplay/charge" use="Name"/>
ASP.NetでXSLT1.0を使用しています
動的に生成されたノードセット変数(ソースDOMから選択された些細な変数とは対照的)を参照していると安全に推測できます。そうです、コンテンツに対してキーマッチを実行することは可能です。動的に生成されたノードセット変数(この質問で示すように)。
次のような変数があると仮定します。
<xsl:variable name="ChargesForDisplay">
<charge>
<Name>Name1</Name>
</charge>
<charge>
<Name>Name2</Name>
</charge>
<charge>
<Name>Name1</Name>
</charge>
<charge>
<Name>Name3</Name>
</charge>
</xsl:variable>
次のようにキーを定義します。
<xsl:key name="ChargesKey" match="charge" use="Name"/>
そして、次のように適用できます。
<xsl:template match="/">
<xsl:apply-templates select="msxsl:node-set($ChargesForDisplay)" />
</xsl:template>
<xsl:template
match="charge[generate-id(.)=generate-id(key('ChargesKey',Name)[1])]">
<xsl:variable name="matchingItems" select="key('ChargesKey', Name)" />
...
</xsl:template>
もちろん、変数にソースXML DOMからのノードの選択が含まれている場合は、を使用する必要がないことを除いて、まったく同じアプローチですmsxsl:node-set()
。
ソースXMLドキュメントまたは動的に生成された複数のノードセット変数にも存在するノード名にキーがあると、グループ化によって予期しない結果が生じる可能性があると思われます(key()関数は変数とソースドキュメント)。このため、特定の1つの変数にのみ存在し、他の場所には存在しないノードにキーを定義することをお勧めします。
xsl:keyのmatch属性は有効なパターンである必要があり、$ x/yは有効なパターンではありません。だから、答えはノーです。今、あなたが達成しようとしていることを教えてください。私たちはあなたがそれを達成するのを手伝うことができます。(JLRisheは、いくつかのワイルドな推測を行います。これは、彼/彼が「ワイルドな仮定」と呼んでおり、おそらく正しいかもしれませんが、推測がどこから来ているのかわかりません)。