2017-01-27 6 views
0

Der Code gibt die "URL" für jedes "Bild" ok (bis zum Limit von 8) mit $ sep nach jeder URL aus.Erhalte die Gesamtzahl der Elemente in XSL

Aber ich möchte eine Bedingung einrichten, dass, wenn es zB 4 "Bild" findet, es $ 4 mal ausgeben wird (nach dem Ausdruck 4 URLs mit $ sep nach jedem). Aber wenn ich den unten stehenden Code ausprobiere, scheint es nicht das Bild/die Bilder zu zählen, da der Zählwert immer 1 ist (egal wie viele "Bilder" es gibt).

Beispiel XML-Eingabe

<images> 
    <image> 
    <url>Url</url> 
    </image> 
    <image> 
    <url>Url</url> 
    </image> 
    <image> 
    <url>Url</url> 
    </image> 
    <image> 
    <url>Url</url> 
    </image> 
</images> 

XSL Code

<xsl:for-each select="images/image[position() &lt;= 8]"> 
    <xsl:value-of select="url"/> <xsl:value-of select="$sep" /> 

</xsl:for-each> 
    <xsl:variable name="set" select="images/image" /> 
    <xsl:variable name="count" select="count($set)" /> 

<xsl:choose> 
    <xsl:when test="count='4'"> 
     <xsl:value-of select="$sep" /> 
     <xsl:value-of select="$sep" /> 
     <xsl:value-of select="$sep" /> 
     <xsl:value-of select="$sep" /> 
    </xsl:when> 
</xsl:choose> 

Stromausgang

URl,URl,URl,URl, 

wollte

URl,URl,URl,URl,,,,, 
Ausgangs

Danke

+2

@H. Pauwelyn Ihr Beitrag zum Fragetitel macht überhaupt keinen Sinn, also rollte ich zurück. Zum OP: Bitte zeigen Sie ein vollständiges, minimales Beispiel des Eingabedokuments, des Stylesheets und der Ausgabe. Vielen Dank. Weitere Hilfe: http://stackoverflow.com/help/mcve. –

Antwort

1

Sie haben das $ Zeichen bei der Überprüfung der count Variable verpasst. Es sollte dies ...

<xsl:when test="$count=4"> 

(Keine Notwendigkeit für Apostrophe um die 4 entweder als $ count eine Zahl ist, obwohl es immer noch in XSLT 1.0 funktionieren sollte)

EDIT: Erwägen Sie die Verwendung eines rekursiven Vorlage, um mit einer beliebigen Anzahl von image Elementen in Ihrem XSLT fertig zu werden.

die Sie interessieren ..

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="text" /> 
    <xsl:variable name="sep" select="','" /> 

    <xsl:template match="/"> 
     <xsl:for-each select="images/image[position() &lt;= 8]"> 
      <xsl:value-of select="url"/> <xsl:value-of select="$sep" /> 

     </xsl:for-each> 

     <xsl:variable name="set" select="images/image" /> 
     <xsl:variable name="count" select="count($set)" /> 

     <xsl:call-template name="pad"> 
      <xsl:with-param name="count" select="$count" /> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="pad"> 
     <xsl:param name="count" /> 
     <xsl:if test="$count + 1 &lt; 8"> 
      <xsl:value-of select="$sep" /> 
      <xsl:call-template name="pad"> 
       <xsl:with-param name="count" select="$count + 1" /> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Ja das war es, danke – PaddyD

Verwandte Themen