0

私のxmlはこのようなものです

    <syddata lastUpdated="19.04.2013 12:40 ">
  <data itemnumber="ln1044-wh-36" variant1="White" variant2="Size 36" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="36" estocklevel="0,000000000000" sortering="0"></data>
  <data itemnumber="ln1044-wh-38" variant1="White" variant2="Size 38" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="38" estocklevel="0,000000000000" sortering="0"></data>
  <data itemnumber="ln1044-wh-40" variant1="White" variant2="Size 40" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="40" estocklevel="0,000000000000" sortering="0"></data>
  <data itemnumber="ln1044-wh-42" variant1="White" variant2="Size 42" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="42" estocklevel="0,000000000000" sortering="0"></data>
  <data itemnumber="ln1044-wh-44" variant1="White" variant2="Size 44" variant1group="Farver" variant2group="Størrelser" var1code="wh" var2code="44" estocklevel="0,000000000000" sortering="0"></data>
</syddata>

for eachループがあります

<xsl:for-each select="$variants/syddata/data">
     <xsl:value-of select="@variant1"/>
</xsl:for-each>

これは白を5回出力します。しかし、私はそれを一度出したいだけです。個別の値を取得したいということです。これを達成する方法はありますか?

4

4 に答える 4

2

一致する属性を持つ兄弟要素が前にないことを確認してdata、各属性値を持つ最初の要素のみを使用します。@variant1

<xsl:for-each select="$variants/syddata/data">
  <xsl:if test="not(preceding-sibling::data[@variant1 = current()/@variant1])">
     <xsl:value-of select="@variant1"/>
  </xsl:if>
</xsl:for-each>
于 2013-04-19T13:14:22.457 に答える
1

XSLT 1.0 で個別の値を取得する必要がある場合、最も効率的な方法の 1 つは、xsl:key. ( Muenchian グルーピング。)

XSLT1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:key name="variant1" match="data" use="@variant1"/>

    <xsl:template match="/syddata">
        <distinct-values>
            <xsl:for-each select="data[count(.|key('variant1',@variant1)[1])=1]">
                <value><xsl:value-of select="@variant1"/></value>
            </xsl:for-each> 
        </distinct-values>
    </xsl:template>

</xsl:stylesheet>

作業例: http://xsltransform.net/bdxtqU

于 2015-07-16T17:31:37.840 に答える