Katharina: xsl:call-template verschachteln

Hallo,

ich möchte gerne mehrere xsl:call-templates ineinander verschachteln. D.h. ich möchte einem named template eine variable übergeben, die ein anderes call-template Ergebnis enthält.

Ist das überhaupt möglich und wenn ja wie?

Das Ganze soll beispielsweise so aussehen:
-------------------------------------------------------------------
<xsl:call-template name="m">
  <xsl:with-param name="s" select="'big'"/>
  <xsl:with-param name="t">
    <xsl:call-template name="f">
      <xsl:with-param name="inputId" select="'mail{$nr}backLink'"/>
      <xsl:with-param name="inputText" select="'Abbrechen'"/>
    </xsl:call-template>
  </xsl:with-param>
</xsl:call-template>
-------------------------------------------------------------------

An das Template mit dem Namen m übergebe ich 2 Parameter: ein statischer Parameter s und ein Parameter t, der HTML Code enthält, nämlich den, der vom Template f generiert wurde.

Danke für Eure Hilfe,
Katharina

  1. Hallo,

    ich möchte gerne mehrere xsl:call-templates ineinander verschachteln. D.h. ich möchte einem named template eine variable übergeben, die ein anderes call-template Ergebnis enthält.

    Ist das überhaupt möglich und wenn ja wie?

    Ja, das kannst du machen. Genau so, wie du es in deinem Beispiel gemacht hast, nur muss du darauf achten, dass die Paramter für den 2. call-templates (z.B. $nr im <xsl:with-param name="inputId" select="'mail{$nr}backLink'"/>) tatsächlich zur Verfügung stehen.

    Grüße
    Thomas

    1. Hallo Thomas,

      Ja, das kannst du machen. Genau so, wie du es in deinem Beispiel gemacht hast, nur muss du darauf achten, dass die Paramter für den 2. call-templates (z.B. $nr im <xsl:with-param name="inputId" select="'mail{$nr}backLink'"/>) tatsächlich zur Verfügung stehen.

      Irgendetwas scheint bei mir allerdings nicht zu funktionieren. Hier nochmal ein Beispiel-Template für f:

      Das template f liefert beispielsweise einen html input tag:
      -------------------------------------------------------------------
      <xsl:template name="f">
        <input type="button" id="i" value="v"/>
      </xsl:template>
      -------------------------------------------------------------------

      Das HTML Element soll als Parameter (t) an das Template m übergeben werden. Aber es kommt nichts an. Muß ich den Input Tag irgendwie als String zurückliefern? Mit xsl:text drum rum geht es allerdings nicht!

      Hast Du eine Idee?
      Grüße,
      Katharina

      1. Hallo,

        Ja, das kannst du machen. [...]

        Irgendetwas scheint bei mir allerdings nicht zu funktionieren. Hier nochmal ein Beispiel-Template für f:

        Das template f liefert beispielsweise einen html input tag:

        <xsl:template name="f">
          <input type="button" id="i" value="v"/>
        </xsl:template>

        Das HTML Element soll als Parameter (t) an das Template m übergeben werden. Aber es kommt nichts an. Muß ich den Input Tag irgendwie als String zurückliefern? Mit xsl:text drum rum geht es allerdings nicht!

        OK, das Problem ist, dass du hier tatsächlich Ergebniselement(e) für die Ausgabe erzeugst. Du musst diese dann kopieren (einfach als String ausgeben geht nicht).

        <xsl:template name="m">
          <xsl:param name="s"/>
          <xsl:param name="t">

        <irgendeinElement>
              <xsl:copy-of select="$t" />
           </irgendeinElement>

        </xsl:call-template>

        Falls das auch nicht so funktioniert wie erwartet, muss du schon mehr aus deinem XSL zeigen.

        Grüße
        Thomas

        1. Hallo Thomas,

          OK, das Problem ist, dass du hier tatsächlich Ergebniselement(e) für die Ausgabe erzeugst. Du musst diese dann kopieren (einfach als String ausgeben geht nicht).

          <xsl:template name="m">
            <xsl:param name="s"/>
            <xsl:param name="t">

          <irgendeinElement>
                <xsl:copy-of select="$t" />
             </irgendeinElement>

          </xsl:call-template>

          danke für Deine Hilfe, mit xsl:copy-of klappt das Ganze ;-)

          Schöne Grüße,
          Katharina

  2. Hallo,

    Das Ganze soll beispielsweise so aussehen:

    <xsl:call-template name="m">
      <xsl:with-param name="s" select="'big'"/>
      <xsl:with-param name="t">
        <xsl:call-template name="f">
          <xsl:with-param name="inputId" select="'mail{$nr}backLink'"/>
          <xsl:with-param name="inputText" select="'Abbrechen'"/>
        </xsl:call-template>
      </xsl:with-param>
    </xsl:call-template>

    An das Template mit dem Namen m übergebe ich 2 Parameter: ein statischer Parameter s und ein Parameter t, der HTML Code enthält, nämlich den, der vom Template f generiert wurde.

    Was ist denn in t alles variabel und was ist fix?

    bydey

    --
    -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
    -- Navigate all your PHP web projects with  PHP Project Browser--