Hallo,
Es wird immer der erste node angezeigt!
Ersten du rufst hier ein Template auf, für den du aber gar keine Parameter definiert hast, also wird dein with-param nichts bewirken.
<xsl:apply-templates select="control">
<xsl:with-param name="btnName" select="new"/>
</xsl:apply-templates>
<xsl:template name="BUTTON" match="BUTTON">
<xsl:param name="btnName">
<xsl:value-of select="//BUTTON/@name"/>
</xsl:param>
Der Paramter hier an dieser Stelle selektiert genau des erste BUTTON-Element aud dem Dokument. Außerdem du willst ja den Parameter später bekannt geben.
<xsl:text disable-output-escaping="yes"><img src="</xsl:text>
<xsl:value-of select="//BUTTON[@name=$btnName]/@src"/>
<xsl:text disable-output-escaping="yes">" href="</xsl:text>
<xsl:value-of select="//BUTTON[@name=$btnName]/@href"/>
<xsl:text disable-output-escaping="yes">" alt="</xsl:text>
<xsl:value-of select="//BUTTON[@name=$btnName]/@alt"/>
<xsl:text disable-output-escaping="yes">" border="0"/></xsl:text>
Das ist mächtig viel Lärm um nichts und es macht dir das Leben zur Hölle wenn du mit solchen Kontrukten arbeiten willst.
Du _kannst_ Elemente normal in einem XSL-Sheet schreiben: diese sind dann die 'literal result elements' und werden in das Ergebnisdokument hineingeschreiben.
<xsl:value-of select="//BUTTON[@name=$btnName]/@src"/>
xsl:value-of enthält als Wert _immer_ nur den ersten Knoten auf dem der XPath-Ausdruck im select="" passt. (auch wenn es mehrere solche Knoten gäbe)
was mach ich falsch??
Alles was nur geht. ;-)
So könnte dein Template aussehen (wobei du beachten solltest, dass ein <img> in HTML kein Attribut href haben darf!):
<xsl:template match="control/BUTTON">
<xsl:param name="btnName" />
<xsl:if test="$btnName = name">
<img src="{@src}" href="{@href}" alt="{@alt}" border="0" />
</xsl:if>
</xsl:template>
und so könntest du es aufrufen:
<tr><td>
<xsl:apply-templates select="control/BUTTON">
<xsl:with-param name="btnName" select="new"/>
</xsl:apply-templates>
</td></tr>
Die _eigentliche_ Frage ist, was möchtest du erreichen?
Ich nehme an du möchtest die BUTTON-Elemente gruppiert nach dem @name-Attribut ausgeben. Wenn ja, solltest du dich mit key() und xsl:key beschäftigen. Im Archiv findest du jede Menge Lösungen dazu.
Grüße
Thomas