Announcement

Collapse
No announcement yet.

Variable mit Quell-Wert füllen und später darstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variable mit Quell-Wert füllen und später darstellen

    Hallo Gemeinde,

    als kompletter Neuling hier und auch zum Thema XSLT will sich doch folgendes Problem einfach nicht lösen:

    Ich erstelle mit diesem XSLT einen Datensatz bzw. erstelle eine Zeichenkette. Dabei enthalten die ersten zwei Stellen fix den Wert "08".

    Die darauf folgenden Stelle soll abhängig von einem Wert einer Datenbankabfrage, welcher sich in "Column[6]" befindet füllen. Wenn also aus der Datenbank der Wert SBES ausgelesen wird, soll sich die Variable Scancode mit "10" füllen und die Variable Zusatzcode mit "Z24".

    Unter dem Choose Knoten sollen dann diese Variablen ausgelesen werden. Diese werden bei meinem Skript jedoch total übergangen. Die Stellen in der Zeichenkette bleiben einfach leer und das Skript macht mit den Datums- und Uhrzeitfeldern weiter....

    Was mache ich falsch?


    <!-- global -->
    <xsl:variable name="Scancode"/>
    <xsl:variable name="Zusatzcode"/>
    <Interchange>
    <Dateianfang>
    <xsl:text>08</xsl:text>
    <xsl:choose>
    <xsl:when test="Column[6]/Value='SBES'"><xsl:variable name="Scancode">10</xsl:variable>
    <xsl:variable name="Zusatzcode">Z24</xsl:variable>
    </xsl:when>
    <xsltherwise>
    <xsl:variable name="Scancode">00</xsl:variable>
    <xsl:variable name="Zusatzcode">Z00</xsl:variable>
    </xsltherwise>
    </xsl:choose>
    <xsl:value-of select="$Scancode"/>
    <xsl:value-of select="$Zusatzcode"/
    <xsl:value-of select="format-date((current-date()), '[Y0001][M01][D01]')"/>
    <xsl:value-of select="format-time((current-time()), '[H01][m01][s01]')"/>
    <xsl:text>|D0992</xsl:text>
    <xsl:text>|T001</xsl:text>
    </Dateianfang>

  • #2
    Du musst das anders herum "aufzäumen":
    Code:
    <xsl:variable name="Scancode">
      <xsl:choose>
         <xsl:when test="Column[6]/Value = 'SBES'">10</xsl:when>
         <xsl:otherwise>00</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:value-of select="$Scancode"/>
    Mit XSLT 2.0 kann man das kürzer als
    Code:
    <xsl:variable name="Scancode" select="if (Column[6]/Value = 'SBES') then '10' else '00'"/>
    <xsl:value-of select="$Scancode"/>
    schreiben.

    Du willst zwei Variablen füllen, dabei aber dieselbe Abfrage (Column[6]/Value = 'SBES') verwenden, dabei sollte man (mit XSLT 2.0, das du vermutlich verwendest) eventuell eine Variable vom Typ Sequenz nehmen, also etwa
    Code:
    <xsl:variable name="codes"
      select="if (Column[6]/Value = 'SBES') then ('10', 'Z24') else ('00', 'Z00')"/>
    <xsl:value-of select="codes[1]"/>
    <xsl:value-of select="codes[2]"/>

    Comment


    • #3
      vielen Dank für die schnelle Antwort.

      Das heißt, ich muss einen Block Code schreiben, der nur die Variable $Scancode bearbeitet und einen weiteren Block, der die Variable $Zusatzcode bearbeitet!

      Hab ich das richtig verstanden?

      Gruß

      Comment


      • #4
        Wenn du zwei verschiedene Variablen definieren willst, ja, dann musst du zwei xsl: variable-Elemente haben, und in deren Inhalt jeweils definieren, wie der Wert bestimmt wird. Aber am Ende habe ich ja für XSLT 2.0 noch gezeigt, wie man nur eine Variable definieren kann, deren Wert eine Sequenz von zwei Werten ist, damit kannst du dir Schreibarbeit sparen.

        Comment


        • #5
          Originally posted by Martin Honnen View Post
          Wenn du zwei verschiedene Variablen definieren willst, ja, dann musst du zwei xsl: variable-Elemente haben, und in deren Inhalt jeweils definieren, wie der Wert bestimmt wird. Aber am Ende habe ich ja für XSLT 2.0 noch gezeigt, wie man nur eine Variable definieren kann, deren Wert eine Sequenz von zwei Werten ist, damit kannst du dir Schreibarbeit sparen.
          super, vielen Dank für die schnelle Hilfe und die tollen Tips!

          Comment

          Working...
          X