Thomas J.S.: XSL if

Beitrag lesen

Hallo,

ich möchte aus eine XML-Datei, alle Tags ab dem 6. Element ausgeben, dieses klappt gut. Weiteres möchte ich, dass im Falle, wenn weniger als 6. Elemente vorhanden sind, dass eine Meldung ausgegeben wird. Dieses klappt leider nicht.

xsl:template
...
<xsl:apply-templates select="document('Test.xml')//Element"/>
...
</xsl:template>
<xsl:template match="Element">
<xsl:if test="position() &gt; 5">

Das kann nichts bringen. position() wird hier immer 1 sein, weil das Template für jedes Element neu instantiiert (sprich neu aufgerufen und ausgeführt) wird.

Statt:
xsl:template
 ...
 <xsl:apply-templates select="document('Test.xml')//Element"/>
 ...
</xsl:template>

nimm sowas (hier nur schematisch dargestellt):

xsl:template
 ...
 <xsl:variable name="counter" select="count(document('Test.xml')//Element)" />
 <xsl:for-each select="document('Test.xml')//Element">
  xsl:choose
    when test: counter = 0
     keine Elemente
    when test: position() &lt; 6
      apply-templates
    otherwise
 ...
</xsl:template>

Grüße
Thomas