2009-06-05 19 views
14

ho questo XSLT:chiamata con il parametro

<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> 

voglio visualizzare ogni elemento (come nel nome/valore), Come chiamare questo modello?

+0

* Mi dispiace aggiungere una risposta quando volevo solo commentare. Ciò è dovuto alle limitazioni di StackOverflow basate sul punteggio ... * @samjudson: quali problemi c'erano nell'originale? Puoi spiegare, per favore, i problemi che hai risolto? Grazie – Chucky

risposta

24

Dal momento che il modello prevede un insieme di nodi, si deve fare:

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

provare qualcosa di simile:

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

C'è un motivo per cui questo è stato downvoted? –

+2

perché passa una stringa nel modello, non un nodeset? – samjudson

+1

Molto vero, ma era solo un semplice esempio di come chiamare un modello con parametri. –

2

Ci sono una serie di problemi nel vostro XSLT originale, così ho lavorato attraverso e ottieni il seguente codice che fa quello che vuoi io credo:

<?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 risposta originale non usa il parametro. Funziona solo se il parametro è = l'elemento corrente. Questo prende in considerazione il parametro.

<?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> 
Problemi correlati