2009-06-05 9 views
14

J'ai ce xslt:appel modèle xslt avec le paramètre

<xsl:template name="dumpDebugData"> 
    <xsl:param name="elementToDump" /> 
    <xsl:for-each select="$elementToDump/@*"> 
     <xsl:text>&#10;</xsl:text> <!-- newline char --> 
     <xsl:value-of select="name()" /> : <xsl:value-of select="." /> 
    </xsl:for-each> 
    </xsl:template> 

je veux afficher tous les éléments (comme dans le nom/valeur), comment dois-je appeler ce modèle?

+0

* Désolé d'ajouter une réponse quand je voulais juste commenter. Ceci est dû aux limitations de StackOverflow basées sur le score ... * @samjudson: Quels problèmes étaient présents dans l'original? Pouvez-vous expliquer, s'il vous plaît, les problèmes que vous avez corrigés? Merci – Chucky

Répondre

24

Étant donné que le modèle prévoit un ensemble de nœuds, vous devez faire:

<xsl:call-template name="dumpDebugData"> 
    <xsl:with-param name="elementToDump" select="some/xpath" /> 
</xsl:call-template> 
11

Essayez quelque chose comme ceci:

<xsl:call-template name="dumpDebugData"> 
    <xsl:with-param name="elementToDump">foo</xsl:with-param> 
</xsl:call-template> 
+0

Y at-il une raison pour laquelle cela a été downvoted? –

+2

parce que passe une chaîne dans le modèle, pas un jeu de nœuds? – samjudson

+1

Très vrai, mais c'était juste un exemple simple de comment appeler un modèle avec des paramètres. –

2

Il y a un certain nombre de questions dans votre XSLT d'origine, donc j'ai travaillé par et vous avez obtenu le code suivant qui fait ce que vous voulez que je crois:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output indent="yes" /> 
    <xsl:strip-space elements="*" /> 
    <xsl:template match="element()"> 
     <xsl:call-template name="dumpDebugData"> 
     <xsl:with-param name="elementToDump" select="." /> 
     </xsl:call-template> 
     <xsl:apply-templates /> 
    </xsl:template> 
    <xsl:template name="dumpDebugData"> 
     <xsl:param name="elementToDump" /> 
     Node: 
     <xsl:value-of select="name()" /> 
     : 
     <xsl:value-of select="text()" /> 
     <xsl:for-each select="attribute::*"> 
     Attribute: 
     <xsl:value-of select="name()" /> 
     : 
     <xsl:value-of select="." /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
4

la réponse originale ne utilisez le paramètre. Cela ne fonctionne que si le paramètre = l'élément courant. Cela prend en compte le paramètre.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output indent="yes" /> 
    <xsl:strip-space elements="*" /> 
    <xsl:template match="element()"> 
     <xsl:call-template name="dumpDebugData"> 
     <xsl:with-param name="elementToDump" select="." /> 
     </xsl:call-template> 
     <xsl:apply-templates /> 
    </xsl:template> 
    <xsl:template name="dumpDebugData"> 
     <xsl:param name="elementToDump" /> 
     Node: 
     <xsl:value-of select="name($elementToDump)" /> 
     : 
     <xsl:value-of select="text($elementToDump)" /> 
     <xsl:for-each select="$elementToDump/@*"> 
     Attribute: 
     <xsl:value-of select="name()" /> 
     : 
     <xsl:value-of select="." /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
Questions connexes