Hallo,
Ersten muss du deinen Kode echt bereinigen.
Es ist mühsam, wenn man erstmal die vermeidbaren Fehler, wie die unmotiviert heurmstehende End-Tags, die nie geöffnet worden sind etc., beheben muss.
Wie konntest du überhaupt mit dem Kode arbeiten, das er, so wie du ihn gepostet hast, nirgendwo funktionieren kann!?
So, zu deiner Fragen:
Im dem Teil:
<xsl:if test="Article/testelement[. = 'UPE']">
<a class="cap01" name="cap01" />
<a class="h2" href="http://bupmain.de" target="_blank">
<h2>User Productivity</h2>
</a>
<xsl:apply-templates select="Article" mode="upe" />
<xsl:call-template name="upe_row" />
</xsl:if>
Übrigens, man packt keinen <h2> in einem <a>!
Kannst du statt apply-templates und call templates jeweils ein for-each verwenden.
Es hat so oder so nicht viel sinn ein konstrukt zu haben wie:
<xsl:apply-templates select="Article" mode="upe" />
<xsl:template match="Article" mode="upe">
xsl:choose
<xsl:when test="testelement[. = 'UPE']">
<xsl:call-template name="upe" />
Also:
-------------------
<xsl:if test="Article/testelement[. = 'UPE']">
<a class="cap01" name="cap01"></a>
<h2>
<a class="h2" href="http://bupmain.de" target="_blank">User Productivity</a>
</h2>
<xsl:for-each select="Article[testelement[. = 'UPE']]">
<h3>
<a target="_blank" href="{link}">
<xsl:value-of select="titel" />
</a>
</h3>
<p>
<xsl:value-of select="abstract" />
</p>
<div class="screenonly">
<p class="backtotop" align="right">
<a href="#top">Back to top</a>
</p>
</div>
<xsl:if test="position() = last()">
<hr noshade="noshade" />
</xsl:if>
</xsl:for-each>
</xsl:if>
------------------
Ähnlich dann für/unter: <xsl:if test="Article/testelement[. = 'DU']">
Grüße
Thomas