Я не уверен, почему люди всегда хотят использовать <xsl:for-each>
, когда <xsl:apply-templates>
явно лучшая альтернатива.
Хорошо, это риторический вопрос. Я знаю, почему это так: <xsl:for-each>
кажется проще. Но это не & mdash; следующие два шаблона заменяют всю конструкцию for-каждой:
<xsl:template match="/">
<e><xsl:apply-templates select="$B/c/d[$A/a/b = .]" /></e>
</xsl:template>
<xsl:template match="d">
<f i="{position()}"><xsl:value-of select="." /></f>
</xsl:template>
Выход:
<e>
<f i="1">20</f>
<f i="2">30</f>
</e>
Ну, я немного обманул. Вы можете сократить <xsl:for-each>
версию до этого:
<xsl:template match="/">
<e>
<xsl:for-each select="$B/c/d[$A/a/b = .]">
<f i="{position()}"><xsl:value-of select="." /></f>
</xsl:for-each>
</e>
</xsl:template>
Тем не менее, ему не хватает легкости <xsl:apply-templates>
варианта, ИМХО.