2017-03-24 5 views
0

Ich bin durch eine Knotengruppe Iterieren mit der folgenden:Bedingte Gruppierung Knoten mithilfe von XSLT 1.0

<xsl:for-each select="NewDataSet/VehicleDetail/Options/Option"> 
    <xsl:choose> 
     <xsl:when test="string-length(.) > 40"> 
      <div class="large"> 
       <xsl:value-of select="."/> 
      </div> 
     </xsl:when> 
     <xsl:otherwise> 
      <div class="small"> 
       <xsl:value-of select="."/> 
      </div> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:for-each> 

Was würde ich Gruppe zu tun in der Lage sein mag, ist die großen Gegenstände (40 Zeichen +) und die kleinen Artikel (40 Zeichen und weniger) etwas in der Art:

<div class="largeItems"> 
    <div class="large">Large Item</div> 
    <div class="large">Large Item</div> 
    <div class="large">Large Item</div> 
    <div class="large">Large Item</div> 
    <div class="large">Large Item</div> 
</div> 
<div class="smallItems"> 
    <div class="small">Small Item</div> 
    <div class="small">Small Item</div> 
    <div class="small">Small Item</div> 
    <div class="small">Small Item</div> 
    <div class="small">Small Item</div> 
</div> 

Vielen Dank.

Antwort

1

Versuchen:

<div class="largeItems"> 
    <xsl:for-each select="NewDataSet/VehicleDetail/Options/Option[string-length() > 40]"> 
     <div class="large"> 
      <xsl:value-of select="."/> 
     </div> 
    </xsl:for-each> 
</div> 
<div class="smallItems"> 
    <xsl:for-each select="NewDataSet/VehicleDetail/Options/Option[string-length() &lt;= 40]"> 
     <div class="small"> 
      <xsl:value-of select="."/> 
     </div> 
    </xsl:for-each> 
</div> 

Oder, wenn Sie bevorzugen weniger Code-Duplizierung:

<div class="largeItems"> 
    <xsl:apply-templates select="NewDataSet/VehicleDetail/Options/Option[string-length() > 40]"> 
     <xsl:with-param name="class" select="'large'"/> 
    </xsl:apply-templates> 
</div> 
<div class="smallItems">  
    <xsl:apply-templates select="NewDataSet/VehicleDetail/Options/Option[string-length() > 40]"> 
     <xsl:with-param name="class" select="'small'"/> 
    </xsl:apply-templates> 
</div> 

und dann:

<xsl:template match="Option"> 
    <xsl:param name="class"/> 
    <div class="{$class}"> 
     <xsl:value-of select="."/> 
    </div> 
</xsl:template> 

ungetestet, da weder Eingabe noch Kontext bereitgestellt wurden.

+0

WOW. So einfach. Entschuldigen Sie den Mangel an Input und Kontext. Aber deine Intuition hat dir gut gedient. Spot auf. Danke vielmals. Wird als Antwort akzeptieren, sobald es mir erlaubt. –

+0

Danke für den aktualisierten Code auch. Sehr cool. :) –