XLSUser: Glob.Vaiable ?

Ist es möglich in einer XSLT, globale Variablen zu setzen, die

1.) veränderbar sind, z.B. im Sinne eines counters
2.) aus jedem Template addiert oder subtrahiert werden können ?

Bisherige Erfahrung:

xsl:variable ist in Wahrheit eine Konstante.
xsl:param funktioniert offenbar nur innerhalb desselben Templates, wodurch ein wichtiger Aspekt nicht berücksichtigt werden kann.

Gibt es Erfahrungen dazu ?

Danke.

  1. Hallo,

    Ist es möglich in einer XSLT, globale Variablen zu setzen, die

    1.) veränderbar sind, z.B. im Sinne eines counters

    Nein.

    2.) aus jedem Template addiert oder subtrahiert werden können ?

    Jein.

    Bisherige Erfahrung:

    xsl:variable ist in Wahrheit eine Konstante.

    Könnte man so sehen, ja.

    xsl:param funktioniert offenbar nur innerhalb desselben Templates, wodurch ein wichtiger Aspekt nicht berücksichtigt werden kann.

    Gibt es Erfahrungen dazu ?

    Du kannst auch globale Parameter setzen. Verwende anstelle einer globaler Variable einen globalen Paramter.

    Du kannst auch "tricksen" - im begrenzten Umfeld - wenn dir klar ist, dass Variablen wie Konstanten gesehen werden können.

    <xsl:variable name="myCounter" select="$a + $b" />
    Der Wert von myCounter ist immer ($a + $b), haher "konstant". Was im $a und im $b steht, ist eine andere Sache. Deren Werte können sich ändern.

    Was du nicht machen kannst ist, aus einem Template in ein anderes "hinüberschreiben" z.b. wenn du einen globalen Zählen haben möchtest.
    Der Grund ist, dass der Prozessor die Templates in beliebiger Reihe abarbeiten kann, er kann Templates sogar parallel abarbeiten.
    Dem kannst du nur so begegnen, in dem du deine Templates parametisierst, sie immer mit entsprechenden Parameter aufrufst und dafür sorgst, dass die Parameter auch immer an weitere aufgerufene Templates weitergegeben werden (was in XSLT 1.0 etwas mühsamer ist als im XSLT 2.0).

    Grüße
    Thomas

    1. Hallo !

      Klasse Ausführungen zum Thema.

      Werde also mal nachsehen, was "parametisierte Templates" (?) sind.

      Danke.

      Grüße
      XSLUser

      Hallo,

      Ist es möglich in einer XSLT, globale Variablen zu setzen, die

      1.) veränderbar sind, z.B. im Sinne eines counters

      Nein.

      2.) aus jedem Template addiert oder subtrahiert werden können ?

      Jein.

      Bisherige Erfahrung:

      xsl:variable ist in Wahrheit eine Konstante.

      Könnte man so sehen, ja.

      xsl:param funktioniert offenbar nur innerhalb desselben Templates, wodurch ein wichtiger Aspekt nicht berücksichtigt werden kann.

      Gibt es Erfahrungen dazu ?

      Du kannst auch globale Parameter setzen. Verwende anstelle einer globaler Variable einen globalen Paramter.

      Du kannst auch "tricksen" - im begrenzten Umfeld - wenn dir klar ist, dass Variablen wie Konstanten gesehen werden können.

      <xsl:variable name="myCounter" select="$a + $b" />
      Der Wert von myCounter ist immer ($a + $b), haher "konstant". Was im $a und im $b steht, ist eine andere Sache. Deren Werte können sich ändern.

      Was du nicht machen kannst ist, aus einem Template in ein anderes "hinüberschreiben" z.b. wenn du einen globalen Zählen haben möchtest.
      Der Grund ist, dass der Prozessor die Templates in beliebiger Reihe abarbeiten kann, er kann Templates sogar parallel abarbeiten.
      Dem kannst du nur so begegnen, in dem du deine Templates parametisierst, sie immer mit entsprechenden Parameter aufrufst und dafür sorgst, dass die Parameter auch immer an weitere aufgerufene Templates weitergegeben werden (was in XSLT 1.0 etwas mühsamer ist als im XSLT 2.0).

      Grüße
      Thomas

      1. Hallo,

        Werde also mal nachsehen, was "parametisierte Templates" (?) sind.

        Templates mit Parameter ;-)
        D.h. dass du im Stylesheet/Template Parameter definierst, die du dann beim Aufruf des Templates befüllst.

        Es gibt einge hilfreihe Erklärungen (und Beispiele) zu Variablen und Parameter unter:
        http://www.dpawson.co.uk/xsl/sect2/N8090.html und http://www.dpawson.co.uk/xsl/sect2/N5982.html

        Grüße
        Thomas

        PS: bitte achte auf TOFU in deinen Postings.

        1. Hallo,

          Werde also mal nachsehen, was "parametisierte Templates" (?) sind.

          Templates mit Parameter ;-)

          Na das will ich aber auch hoffen ;-)

          D.h. dass du im Stylesheet/Template Parameter definierst, die du dann beim Aufruf des Templates befüllst.

          Es gibt einge hilfreihe Erklärungen (und Beispiele) zu Variablen und Parameter unter:
          http://www.dpawson.co.uk/xsl/sect2/N8090.html und http://www.dpawson.co.uk/xsl/sect2/N5982.html

          Grüße
          Thomas

          PS: bitte achte auf TOFU in deinen Postings.

          Danke für die Hinweise.