2 votes

xsl:apply-templates : la correspondance n'est pas respectée

J'ai un problème avec xsl:apply-templates. J'essaie d'appliquer un modèle à une balise particulière, mais je vois du texte provenant d'autres balises. Un simple fichier xml :

<?xml version="1.0"?>                                                  

<!-- execute with xsltproc foo.xsl foo.xml -->                         
<xsl:stylesheet version="1.0"                                          
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >     

    <xsl:output method="text" />                                       

    <xsl:template match="/foo">                                        
        <xsl:for-each select="bar">                                    
            <xsl:value-of select="grill"/>                             
            <xsl:apply-templates match="baz"/>                         
        </xsl:for-each>                                                
    </xsl:template>                                                    

    <xsl:template match="foo">[<xsl:value-of select="." />|http://example.com/<xsl:value-of select="." />]</xsl:template>                     
</xsl:stylesheet>                                                      

L'entrée est la suivante :

<?xml version="1.0"?>

<foo>
    <bar>
        <baz>a <foo>b</foo> c</baz>
        <grill>grill</grill>
    </bar>
</foo>

Le résultat est le suivant :

grill
        a [b|http://example.com/b] c
        grill

Je m'attendais à ce que le résultat soit

grill
a [b|http://example.com/b] c

(Je ne me soucie pas des problèmes d'espacement pour l'instant)

Je peux contourner le problème en enveloppant les xsl:apply-templates avec un xsl:for-each :

<xsl:for-each select="grill">
    <xsl:apply-templates match="grill"/>
</xsl:for-each>

Mais je n'aime vraiment pas cette solution. Existe-t-il une meilleure solution ?

3voto

Daniel Haley Points 19098

L'attribut match n'est pas autorisé sur le site xsl:apply-templates élément. Modifier match à select dans le xsl:apply-templates et réessayer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X