1

Muenchianのグループ化XSLT1.0Group Byに関するこの投稿を見つけて、やりたいことを途中で完了しましたが、サブノードをグループ化する方法がわかりません。

私のXMLは次のようになります。

<NewDataSet>
   <Vehicle>
     <ManufacturerId>53</ManufacturerId>
     <ManufacturerName>VAUXHALL</ManufacturerName>
     <Model>Corsa</Model>
   </vehicle>
   <Vehicle>
     <ManufacturerId>53</ManufacturerId>
     <ManufacturerName>VAUXHALL</ManufacturerName>
     <Model>Astra</Model>
   </vehicle>
   <Vehicle>
     <ManufacturerId>53</ManufacturerId>
     <ManufacturerName>VAUXHALL</ManufacturerName>
     <Model>Corsa</Model>
   </vehicle>
   <Vehicle>
     <ManufacturerId>54</ManufacturerId>
     <ManufacturerName>FORD</ManufacturerName>
     <Model>KA</Model>
   </vehicle>
   <Vehicle>
     <ManufacturerId>54</ManufacturerId>
     <ManufacturerName>FORD</ManufacturerName>
     <Model>Focus</Model>
   </vehicle>
   <Vehicle>
     <ManufacturerId>54</ManufacturerId>
     <ManufacturerName>FORD</ManufacturerName>
     <Model>KA</Model>
   </vehicle>
   <Vehicle>
     <ManufacturerId>55</ManufacturerId>
     <ManufacturerName>CITROEN</ManufacturerName>
     <Model>C4</Model>
   </vehicle>
<NewDataSet>

これは私がこれまでに持っているコードです

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" omit-xml-declaration="yes" />
   <xsl:key name="groups" match="/NewDataSet/Vehicle" use="ManufacturerName" />
   <xsl:template match="/NewDataSet">
      <xsl:apply-templates select="Vehicle[generate-id() = generate-id(key('groups', ManufacturerName)[1])]"/>
   </xsl:template>
   <xsl:template match="Vehicle">
     <div class="makeLnk">
     <a href="/stocklist/?ManufacturerId={ManufacturerId}"><xsl:value-of select="ManufacturerName"/></a>
    <xsl:for-each select="key('groups', ManufacturerName)">
      <div class="modelLnk"><xsl:value-of select="Model"/></div>
    </xsl:for-each>
    </div>
   </xsl:template>
</xsl:stylesheet>

これにより、ManufacturerNamesがグループ化され、下のすべてのモデルが一覧表示されます。ただし、モデルもグループ化して、重複する名前を削除したいと思います。しかし、構文を理解することはできません。

助けていただければ幸いです。

ありがとう。

4

1 に答える 1

1

との値でManufacturerName構成される2番目のキーを使用します。VehicleModel

<xsl:key name="model" match="Vehicle/Model" use="concat(../ManufacturerName, '|', .)"/>

その後、交換してください

   <xsl:template match="Vehicle">
     <div class="makeLnk">
     <a href="/stocklist/?ManufacturerId={ManufacturerId}"><xsl:value-of select="ManufacturerName"/></a>
    <xsl:for-each select="key('groups', ManufacturerName)">
      <div class="modelLnk"><xsl:value-of select="Model"/></div>
    </xsl:for-each>
    </div>
   </xsl:template>

   <xsl:template match="Vehicle">
     <div class="makeLnk">
     <a href="/stocklist/?ManufacturerId={ManufacturerId}"><xsl:value-of select="ManufacturerName"/></a>
    <xsl:for-each select="key('groups', ManufacturerName)/Model[generate-id() = 
  generate-id(key('model', concat(../ManufacturerName, '|', .))[1])]">
      <div class="modelLnk"><xsl:value-of select="."/></div>
    </xsl:for-each>
    </div>
   </xsl:template>
于 2012-12-19T14:49:31.513 に答える