Hi Patrick!
<xsl:template name="main">
<xsl:if test="string(/data/nav/mainnav/@pageId)">
<xsl:value-of select="/data/nav/mainnav"/>
</xsl:if>
</xsl:template>
bedeutet: wenn /data/nav/mainnav[1]/@pageId (die [1] wird von xsl automatisch angenommen) ein String ist, dann gib /data/nav/mainnav[1] aus.
=> Browser hat recht.
<xsl:template name="main">
<xsl:for-each select="/data/nav">
xsl:choose
<xsl:when test="string(./mainnav/@pageId)">
<xsl:value-of select="./mainnav"/>
</xsl:when>
xsl:otherwise
<xsl:value-of select="./mainnav"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
bedeutet: für jeden Knoten in (Knotenliste) /data/nav:
wenn dieses Knotens Subknoten ./mainnav[1]/@pageId ein string ist, dann gib den Subknoten ./mainnav[1] aus,
ansonsten gib den Subknoten ./mainnav[1] aus.
=> gibt also alle knoteninhalte der Gestalt /data/nav/mainnav[x]/. aus. => Browser hat wieder recht.
Womit du dich mal beschäftigen solltest, ist:
http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#param
http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#with_param
Grüsse, Richard