Das Problem hat sich teilweise gelöst.
Durch das Vertauschen der choose-Anweisung mit der value-of select="farbe" funktioniert jetzt die Wenn-Abfrage, wenn ich farben_id= fester Zahlenwert setze.
Die Abfrage "farben_id = /data/grid/row/farbenId" liefert mir nur die Einstellung für den ersten Treffer in /data/grid/row.
Wie kann ich also farben_id mit der passenden farbenId aus dem aktuellen Produkt vergleichen? Ich brauche zuzüglich zu der Pfadangabe, die aktuelle Position im äußeren "for-each"
<xsl:for-each select="data/grid/row">
<xsl:element name="tr">
<td>...</td>
<td>
<xsl:element name="select">
<xsl:for-each select="/data/liste/zeile">
<xsl:element name="option">
xsl:choose
<xsl:when test="farben_id = /data/grid/row/farbenId">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:value-of select="farbe"></xsl:value-of>
</xsl:element>
</xsl:for-each>
</xsl:element>
</td>
<td>...</td>
</xsl:element>
</xsl:for-each>