2
4

1 に答える 1

4

あなたは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(., '&#10;')" />
   </xsl:template>
</xsl:stylesheet>

XMLに適用すると、次のように出力されます。

Sports
Compact
Luxury
于 2013-03-22T20:12:02.740 に答える