Hi Jochen,
<xsl:for-each select="//justus:choice">
<xsl:element name="TR">
<xsl:variable name="current" select="."/>
<xsl:for-each select="//justus:part[(_at_)visible='true']">
<xsl:variable name="dbfeld" select="."/>
<xsl:element name="td">
<xsl:for-each
select="$current/@*[name()=$dbfeld/@dbfeld]">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
...
<xsl:for-each select="//justus:choice">
<xsl:element name="tr">
<xsl:element name="td"><xsl:value-of select="a1"/></xsl:element>
<xsl:element name="td"><xsl:value-of select="a2"/></xsl:element>
...
</xsl:element>
</xsl:for-each>
David is right. Using // is rather expensive in terms of performance. Use full paths as David
suggests, or try using keys if the choice and part elements may occur in unpredictable locations:
<xsl:key name="choices" match="justus:choice" use="'all'" />
<xsl:key name="parts" match="justus:part" use="'all'" />
<xsl:for-each select="key('choices', 'all')">
and
<xsl:for-each select="key('parts', 'all')[(_at_)visible='true']">
Grtz,
Geert