spider: Auflösung einer Variablen innerhalb von call-template

Moin,

ich habe ein Problem mit der Auflösung von Variablen. Und zwar soll ein Template variabel aufgerufen werden <xsl:call-template name="$Template" />. Allerdings löst er sie nicht. Was mach ich da falsch? Vielleicht kennt hier jemand eine Lösung.

Vielen Dank im Vorraus

Gruß Spider

<xsl:call-template name="all">
   <xsl:with-param name="CurrentNode" select="'TestTemplate'"/>
    </xsl:call-template>

<xsl:template name="all">
<xsl:param name="CurrentNode" />
<xsl:variable name="Node">
 ./<xsl:value-of select="string($CurrentNode)" />/preceding-sibling::*
</xsl:variable>

<xsl:variable name="Template">
 <xsl:value-of select="string($CurrentNode)" />tmpl
</xsl:variable>
 xsl:choose
  <xsl:when test="count($Node) mod 2 = '0'">
   <xsl:element name="tr" use-attribute-sets="dark">
    <xsl:call-template name="$Template" />
   </xsl:element>
  </xsl:when>
  xsl:otherwise
   <xsl:element name="tr" use-attribute-sets="val">
    <xsl:call-template name="$Template" />
   </xsl:element>
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>

  1. Hallo,

    ich frage mich, ob das überhaupt zulässig ist?
    Hast du mal versucht $Template einen festen Wert zuzuweisen, um sicher zu gehen, dass du so arbeiten darfst!?

    bydey

    --
    -- noch immer ein erfolgloser <DIV> Jünger --
    1. Ich habe das gemacht und es funktioniert nicht. Die Fehlermeldung lautet, daß er das Template nicht kennt, daher nehme ich an, daß die Variable nicht aufgelöst wird. Ebenso sind Konstrukte wie string($Template) fehlgeschlagen.

  2. Hallo,

    ich habe ein Problem mit der Auflösung von Variablen. Und zwar soll ein Template variabel aufgerufen werden <xsl:call-template name="$Template" />. Allerdings löst er sie nicht.

    Was mach ich da falsch?

    Fast alles.

    <xsl:call-template name="all">
       <xsl:with-param name="CurrentNode" select="'TestTemplate'"/>
        </xsl:call-template>

    mi select="'TestTemplate'" übergibts einen string. -->

    <xsl:template name="all">
    <xsl:param name="CurrentNode" />
    <xsl:variable name="Node">
    ./<xsl:value-of select="string($CurrentNode)" />/preceding-sibling::*
    </xsl:variable>

    --> Hier macht du aus einem string nochmal einen string und dann möchtest du, dass dieser string als Knoten gilt. Das geht nicht.

    <xsl:variable name="Template">
    <xsl:value-of select="string($CurrentNode)" />tmpl
    </xsl:variable>
    xsl:choose
      <xsl:when test="count($Node) mod 2 = '0'">
       <xsl:element name="tr" use-attribute-sets="dark">
        <xsl:call-template name="$Template" />

    name="$Template" $Template ist kein gültiger Name für einen Template:
    name="Template" wäre einer, aber (zumindest hier) hast du kein Template mit dem Namen, sprich es gibt kein <xsl:template name="Template"> bei dir.

    Grüße
    Thomas