Benni: xslt, count mit Bedingung

Beitrag lesen

Hallo benni,

Mein Versuch dreht sich bislang um folgenden code (Für Januar):

<xsl:for-each select="Termine/Termin">
<xsl:if test="01 = substring(Date,4,2)">
   <xsl:value-of select="count(Date)"/>
</xsl:if>
</xsl:for-each>


>   
> > Leider gibt mir die Transformation dann folgendes aus: 11 - er prüft die Bedinung für jeden einzelnen Tag Termin und zählt dann die Ergebnisse zusammen, aber nicht für alle Termin-Tags.  
>   
> Ansatz:  
> ~~~xml

<xsl:template match="Person">  

>   <p><xsl:value-of select="Name"/>  
>     <xsl:variable name="anzahl" select="count(Termine/Termin[substring(Date,4,2)='01'])"/>  
>     <xsl:if test="$anzahl > 0">  
>       <br /><xsl:text>01: </xsl:text><xsl:value-of select="$anzahl"/>  
>     </xsl:if>  
>   
>     <xsl:variable name="anzahl" select="count(Termine/Termin[substring(Date,4,2)='02'])"/>  
>     <xsl:if test="$anzahl > 0">  
>       <br /><xsl:text>02: </xsl:text><xsl:value-of select="$anzahl"/>  
>     </xsl:if>  
>   </p>  
> </xsl:template>

Grüße,
Thomas

Ok, Super! Klappt auch. Ich hab derweil zwar auch schon einen weg gefunden. Die Ergebnisse weichen ja nicht sonderlich von einander ab..

<xsl:value-of select="count(//Date[substring(.,4,2) = '01'])"/>

Jetzt muss ich das ganze nur noch rollierend hinbekommen. Soll heißen, für die letzten 12 Monate soll er mir die Ergebnisse anzeigen. Also für heute: ab Oktober 2007 bis September 2008. Dazu hab ich in der xml noch einen Tag <created> - das gibt mir das aktuelle Datum aus. Derzeit ist das ganze bei mir noch ein bisschen unelegant, da ich 12 Prüfungen drinn habe und dann die jeweilige bei Übereinstimmung nutze:

Die Variable Monat1 ist aus <created>:

<xsl:when test="$Monat1=01">  
 <xsl:value-of select="count(//Date[substring(.,4,2) = '01'])"/>  
        <xsl:text> </xsl:text>  
 <xsl:value-of select="count(//Date[substring(.,4,2) = '02'])"/>  
        ...  
  
</xsl:when>  
<xsl:when test="$Monat1=02">  
 <xsl:value-of select="count(//Date[substring(.,4,2) = '02'])"/>  
 <xsl:text> </xsl:text>  
 <xsl:value-of select="count(//Date[substring(.,4,2) = '03'])"/>

usw. das geht bestimmt noch besser. Aber funktional ist es allemal..