2010-01-19 8 views

Répondre

1

Un modèle récursif nommé peut faire:

<xsl:template name="processNode"> 
    <xsl:param name="current" select="1"/> 
    <xsl:variable name="currentNode" select="*[local-name() = concat('node', $current)]"/> 

    <xsl:if test="$currentNode"> 
    <!-- Process me --> 
    <xsl:call-template name="processNode"> 
     <xsl:with-param name="current" select="$current + 1"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

Ou si vous ne se soucient pas de l'ordre, juste un modèle normal:

<xsl:template match="*[starts-with(local-name(), 'node')]"> 
</xsl:template> 
+0

Le "modèle récursif nommé" est trop compliquée. Le même effet peut être obtenu sans aucune récursion, et un code plus court. ;-) – Tomalak

2

À moins que je manque quelque chose complètement ce que vous avez besoin est aussi simple que cela.

<xsl:template match="nodes"> 
    <xsl:for-each select="*"> 
     <!-- Do what you want with each node. --> 
    </xsl:for-each> 
</xsl:template> 
+1

+1 pour KISS ... encore plus simple: Filburt

0
<xsl:template match="nodes"> 
    <xsl:apply-templates select="*"> 
    <!-- the xsl:sort is redundant if the input already is in correct order --> 
    <xsl:sort select="substring-after(name(), 'node')" data-type="number" /> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="nodes/*"> 
    <!-- whatever --> 
</xsl:template> 
Questions connexes