1 に答える
あなたはgenerate-idについて言及しているので、ここでMuenchian Groupingについて読んでいた可能性があります。これは、明確な値を取得するために必要なことです。タイプ要素に興味があるので、そのような要素を値で簡単に検索できるように、キーを定義することから始めます。
<xsl:key name="types" match="type" use="." />
ここで、個別の要素を取得するには、すべての型要素を反復処理しますが、出力するのは個別の要素のみです。そして、それらが明確であることを伝えるために、それらが指定された値のキーで最初に発生するかどうかを確認します。
これが表現です...
<xsl:apply-templates select="//type[generate-id() = generate-id(key('types', .)[1])]" />
しかし、それをその有能な部分に分解するには...
key('types', .)
-現在の値のすべての型要素を返します
key('types', .)[1]
-キーの最初の要素を返します
generate-id(key('types', .)[1])
-その要素の一意の識別子を返します
generate-id() = generate-id(key('types', .)[1])
-現在の要素の一意の識別子がキーの最初の要素の一意の識別子と等しいかどうかを確認します。
したがって、それらが一致する場合、それは最初の発生であり、出力することができます。
これが完全なXSLTです
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:key name="types" match="type" use="." />
<xsl:template match="/">
<xsl:apply-templates select="//type[generate-id() = generate-id(key('types', .)[1])]" />
</xsl:template>
<xsl:template match="type">
<xsl:value-of select="concat(., ' ')" />
</xsl:template>
</xsl:stylesheet>
XMLに適用すると、次のように出力されます。
Sports
Compact
Luxury