1

この質問に関連して、xsl:key内で変数を使用することは可能ですか?私はこのようなsmthをしたい:

<xsl:key name="ChargesKey" match="$ChargesForDisplay/charge" use="Name"/>

ASP.NetでXSLT1.0を使用しています

4

2 に答える 2

1

動的に生成されたノードセット変数(ソース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つの変数にのみ存在し、他の場所には存在しないノードにキーを定義することをお勧めします。

于 2013-01-18T18:06:04.513 に答える
1

xsl:keyのmatch属性は有効なパターンである必要があり、$ x/yは有効なパターンではありません。だから、答えはノーです。今、あなたが達成しようとしていることを教えてください。私たちはあなたがそれを達成するのを手伝うことができます。(JLRisheは、いくつかのワイルドな推測を行います。これは、彼/彼が「ワイルドな仮定」と呼んでおり、おそらく正しいかもしれませんが、推測がどこから来ているのかわかりません)。

于 2013-01-18T22:55:49.653 に答える