2009-06-05 13 views
14

que tiene este XSLT:llamada con el parámetro

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

quiero mostrar todos los elementos (como en nombre/valor), Como llamar en esta plantilla?

+0

* Perdón por agregar una respuesta cuando solo quería hacer un comentario. Esto se debe a las limitaciones de StackOverflow basadas en la puntuación ... * @samjudson: ¿Qué problemas había en el original? ¿Puede explicar, por favor, los problemas que ha solucionado? Gracias – Chucky

Respuesta

24

Desde la plantilla espera un conjunto de nodos, se debe hacer:

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

intentar algo como esto:

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

¿Hay alguna razón por la cual esto fue downvoted? –

+2

porque se pasa una cadena a la plantilla, no a un conjunto de nodos? – samjudson

+1

Muy cierto, pero era solo un simple ejemplo de cómo llamar a una plantilla con parámetros. –

2

Hay una serie de cuestiones en su XSLT original, por lo que trabajaron a través y le conseguí el siguiente código que hace lo que usted quiere Creo:

<?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 respuesta original no usa el parámetro Solo funciona si el parámetro = el elemento actual. Esto toma el parámetro en cuenta.

<?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> 
Cuestiones relacionadas