Frage

Ich habe ein Stück Code, das so aussehen:

<xsl:choose>
   <xsl:when test="some_test">   
      <xsl:value-of select="Something" />
      You are:
      <xsl:variable name="age">12</xsl:variable>
      years
   </xsl:when>
</xsl:choose>

Mein Problem ist, dass ich außerhalb der Variablen $ Alter nutzen möchten, von der Auswahl. Wie kann ich das tun?

Ein ähnliches Problem ist, dass ich mehrere Vorlagen in meiner XSLT-Datei haben, und einer von ihnen ist die Hauptvorlage. Diese:

<xsl:template match="/">
</xsl:template>

Innerhalb dieser Vorlage, nenne ich mehrere andere Vorlagen und wieder würde Ich mag einige der Variablen, von den anderen Vorlagen.

Im Beispiel, wenn ich diesen Code ein:

<xsl:template match="/">
   <xsl:call-template name="search">
   </xsl:call-template>
</xsl:template>

<xsl:template name="search">
   <xsl:variable name="searchVar">Something...</xsl:variable>
</xsl:template>

Dann würde Ich mag die $ searchVar innerhalb meiner Haupt-Vorlage verwenden.

Es ist irgendwie das gleiche Problem wie ich glaube, aber ich kann nicht scheinen, um diese ein, um herauszufinden.

Und ich laufen Umbraco als mein CMS durch die Art und Weise:)

Ich hoffe, dass einige von Ihnen die Antwort.

Danke - Kim

War es hilfreich?

Lösung

Um # 1: Variablen sind gültig innerhalb ihres Grundelementes nur. Was bedeutet, Sie die Logik setzen müssen innen die Variable anstelle von „um“ es:

<xsl:variable name="var">
  <xsl:choose>
    <xsl:when test="some_test">
      <xsl:text>HEY!</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>SEE YA!</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

# 2:. Verwenden Sie Parameterwerte in Vorlagen transportieren

<xsl:template match="/">
  <xsl:variable name="var" select="'something'" />

  <!-- params work for named templates.. -->
  <xsl:call-template name="search">
    <xsl:with-param name="p" select="$var" />
  </xsl:call-template>

  <!-- ...and for normal templates as well -->
  <xsl:apply-templates select="xpath/to/nodes">
    <xsl:with-param name="p" select="$var" />
  </xsl:apply-templates>
</xsl:template>

<!-- named template -->
<xsl:template name="search">
  <xsl:param name="p" />

  <!-- does stuff with $p -->
</xsl:template>

<-- normal template -->
<xsl:template match="nodes">
  <xsl:param name="p" />

  <!-- does stuff with $p -->
</xsl:template>

Um einen Wert zu transportieren zurück an die anrufende Vorlage, kombinieren die oben:

<xsl:template match="/">
  <xsl:variable name="var">
    <xsl:call-template name="age">
      <xsl:with-param name="num" select="28" />
    </xsl:call-template>
  </xsl:variable>

  <xsl:value-of select="$var" />
</xsl:template>

<xsl:template name="age">
  <xsl:param name="num" />

  <xsl:value-of select="concat('You are ', $num, ' years yold!')" />
</xsl:template>

Andere Tipps

Hier finden Sie aktuelle xsl:. Param

Bearbeiten : Ungeprüfte, kann aber funktionieren:

<xsl:param name="var">
  <xsl:choose>
   <xsl:when test="some_test">   
     <xsl:value-of select="string('HEY!')" />
   </xsl:when>
  </xsl:choose>
</xsl:param>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top