1

私はこのキー機能について少し混乱しています:

 <xsl:for-each select="article[count(. | key('idkey', @id)[1]) = 1]>

この for-each ループで何が起こっているのかを簡単に説明できる人はいますか?

キーは次のとおりです。<xsl:key name="idkey" match="/newspapers/newspaper" use="@id"/>

@id は新聞の属性です。

ありがとう。

4

2 に答える 2

-1

このfor-each要素では

<xsl:for-each select="article[count(. | key('idkey', @id)[1]) = 1]">

は、各 属性の最初のfor-each要素に適用されています。 article@id

  • 呼び出しは、現在のものと同じ属性を持つkey('idkey', @id)すべての要素を選択しています。article@id

  • key('idkey', @id)[1]同じ を持つすべての要素の最初のものを選択します。article@id

  • ノードはノード セットに複数回出現することはできないため、現在のノードが最初のノードと同じである場合、結合には1 つの. | key('idkey', @id)[1]ノードが含まれます。それ以外の場合は2 つ含まれます。article article@id

  • の値count()が 1 であることを確認すると、いずれかの最初の要素のみが選択されます@id

これを行う別の方法であり、私が好む方法は、次のgenerate-idように使用することです

select="article[generate-id() = generate-id(key('idkey', @id)[1])]"

生成された ID を比較して、現在の要素がセット内の最初の要素と同じかどうかを直接チェックします。

于 2013-05-25T07:21:08.257 に答える