2009-06-05 6 views
14

Ich habe dieses Xslt:Anruf XSLT-Vorlage mit dem Parameter

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

Ich möchte jedes Element angezeigt werden (wie in Name/Wert), wie nenn ich diese Vorlage?

+0

* Entschuldigung, um eine Antwort hinzuzufügen, wenn ich nur kommentieren wollte. Dies liegt an den Einschränkungen von StackOverflow, basierend auf der Punktzahl ... * @samjudson: Welche Probleme gab es im Original? Können Sie bitte die Probleme erklären, die Sie behoben haben? Danke – Chucky

Antwort

24

Da die Vorlage einen Knotensatz erwartet, müssen Sie tun:

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

Probieren Sie etwas wie folgt aus:

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

Gibt es einen Grund dafür, dass dies abgelehnt wurde? –

+2

da wird eine Zeichenfolge in die Vorlage übergeben, nicht ein Knotensatz? – samjudson

+1

Sehr wahr, aber es war nur ein einfaches Beispiel, wie man eine Vorlage mit Parametern aufrufen kann. –

2

Es gibt eine Reihe von Problemen in Ihrer ursprünglichen XSLT, so dass ich durchgearbeitet es und habe dir den folgenden Code, der was du willst ich glaube:

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

Die ursprüngliche Antwort nicht Verwende den Parameter. Es funktioniert nur, wenn der Parameter = das aktuelle Element ist. Dies berücksichtigt den Parameter.

<?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> 
Verwandte Themen