itebob: ODER-Bedingungen kompakt beschreiben

Hallo,

im Buch 'Jetzt lerne ich XML' http://www.mut.de/main/main.asp?page=bookdetails&isbn=382725924X&TOKEN=%7BEB6FA4AA%2DB2C9%2D453B%2D9423%2DAFBBDCDD6F4D%7D&SID=%7BAF90667B%2DF27F%2D414C%2D9D2F%2DD7C698782F50%7D
ist so ein Beispiel
<xsl:when test="$einParameter[.> 2 and .&lt; 5]">hier 'Anweisungen'</xsl:when>
aufgeführt. Damit soll bewirkt werden, dass die  'Anweisungen' bei Werten in [...] zwischen 2 und 5 ausgeführt werden.
Ich möchte aber eine Reihe von ODER-Bedingungen prüfen wie hier:
<choose>
<xsl:when test="$Parameter=''wert1">
'Anweisungen 1'
</xsl:when>
<xsl:when test="$Parameter=''wert2">
'Anweisungen 1'
</xsl:when>
<xsl:when test="$Parameter=''wert3">
'Anweisungen 1'
</xsl:when>
xsl:otherwise
'Anweisungen 2'
</xsl:otherwise>
</choose>
Also  'Anweisungen 1'  werden bei Werten wert1, wert2 und wert3 ausgeführt.
Ich habe versucht anlehnend auf das Beispiel aus dem Buch 'Jetzt lerne ich XML' und der Beschreibung für XPath-Operatoren
http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#operatoren
die <choose>-Tests durch so eine ODER-Bedingung zu ersetzen:

<choose>
<xsl:when test="$Parameter='wert1' or 'wert2' or 'wert3'">
'Anweisungen 1'
</xsl:when>

xsl:otherwise
'Anweisungen 2'
</xsl:otherwise>
</choose>
Syntaktisch wird meine Lösung vom XSLT-Parser akzeptiert (getestet mit TransformerFactory (Package javax.xml.transform.*) und  Microsoft XML Parser (MSXML 3.0, Service Pack 4)  ) aber der Parser führt   die  'Anweisungen 1' immer aus! Unabhängig davon, ob die Bedingungen  test="$Parameter='wert1' or 'wert2' or 'wert3'" erfüllt sind oder nicht!? Wo ist der Fehler?

Wie gesagt, mir geht es an dieser Stelle darum, mehrere Überprüfungen dieser Art
<xsl:when test="$Parameter=''wert*">
'Anweisungen 1'
</xsl:when>
im <choose> ...</choose>-Konstrukt durch eine kompaktere übersichtlichere ODER-Anweisung zu ersetzen. Wenn sowas in XSLT machbar ist.

  1. Hallo,

    Ich habe versucht anlehnend auf das Beispiel aus dem Buch 'Jetzt lerne ich XML' und der Beschreibung für XPath-Operatoren
    http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#operatoren
    die <choose>-Tests durch so eine ODER-Bedingung zu ersetzen:

    <xsl:when test="$Parameter='wert1' or 'wert2' or 'wert3'">

    Syntaktisch wird meine Lösung vom XSLT-Parser akzeptiert

    Ja, deine XPath-Ausdruck ist syntaktisch absolut korrekt.

    aber der Parser führt   die  'Anweisungen 1' immer aus! Unabhängig davon, ob die Bedingungen  test="$Parameter='wert1' or 'wert2' or 'wert3'" erfüllt sind oder nicht!? Wo ist der Fehler?

    (ich gehe dafon aus, dass dies [<xsl:when test="$Parameter=''wert1">] nr Tipp-, Copy&Past-Fehler ist)

    Der Parser "denkt" so:
    test: $Parameter='wert1'?
      ja: führe Anweisungen aus, beende <choose>.
      nein: test: $Parameter='wert2'?
              ja: führe Anweisungen aus, beende <choose>.
              nein: test: $Parameter='wert3'?
                      ja: führe Anweisungen aus, beende <choose>.
                      nein: gehe zu nächsten <when> oder zu <otherwise>.

    Sobald also der erste Ausdruck erfüllt ist, werden die Anweisungen ausgeführt und xsl:choose beendet.
    Ich vermute, dass du entweder etwas in deinem XML/XSL noch hast, was bewirkt, dass der (Parameter) Test immer mit "ja" beantwortet wird, oder du werwendest diese Abfrage an der falschen stelle.

    Wie gesagt, mir geht es an dieser Stelle darum, mehrere Überprüfungen dieser Art
    <xsl:when test="$Parameter=''wert*">
    'Anweisungen 1'
    </xsl:when>
    im <choose> ...</choose>-Konstrukt durch eine kompaktere übersichtlichere ODER-Anweisung zu ersetzen. Wenn sowas in XSLT machbar ist.

    Ja, aber ich verstehe nciht ganz, was du möchstest.
    geht es dir nur darum eventuell "zu viele" <when>s zusammenzufassen, oder um die Ausführung der XPath-Ausdrucks?

    Grüße
    Thomas

    --
    Surftip: kennen Sie schon Pipolino's Clowntheater?
    http://www.clowntheater-pipolino.net/
    1. Hallo,

      (ich gehe dafon aus, dass dies [<xsl:when test="$Parameter=''wert1">] nr Tipp-, Copy&Past-Fehler ist)

      war eine Schreibfehler, richtig ist so: <xsl:when test="$Parameter='wert1'">

      Ja, aber ich verstehe nciht ganz, was du möchstest.
      geht es dir nur darum eventuell "zu viele" <when>s zusammenzufassen, oder um die Ausführung der XPath-Ausdrucks?

      mir geht es darum 'ODER-Bedingungen kompakt beschreiben' , also  "zu viele" <when>s zusammenzufassen.

      Danke, Thomas und Thomas ;-),

      mit <xsl:when test="$Parameter='wert1' or $Parameter='wert2' or $Parameter='wert3'">
      hat es geklappt!

      also scheint die Konstruktion
      <xsl:when test="$Parameter='wert1' or 'wert2' or 'wert3'">
      doch nicht ganz so funktionieren, wie man denkt, obwohl 'syntaktisch korrekt'?

      1. Hallo,

        also scheint die Konstruktion
        <xsl:when test="$Parameter='wert1' or 'wert2' or 'wert3'">
        doch nicht ganz so funktionieren, wie man denkt, obwohl 'syntaktisch korrekt'?

        Ja.
        Schon (so gut wie) ein [http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=gotcha&lang=on&feld=alle&index_6=on&hits=100@title=Gotcha].

        Grüße
        Thomas

        --
        Surftip: kennen Sie schon Pipolino's Clowntheater?
        http://www.clowntheater-pipolino.net/
        1. ...

          Schon (so gut wie) ein Gotcha.

          Grüße
          Thomas

          --
          Surftip: kennen Sie schon Pipolino's Clowntheater?
          http://www.clowntheater-pipolino.net/
  2. Hallo,

    <xsl:when test="$Parameter='wert1' or 'wert2' or 'wert3'">

    Formuliere die Abfrage so:

      
    <xsl:when test="$Parameter='wert1' or $Parameter='wert2' or $Parameter='wert3'">  
      <!-- ... -->  
    </xsl:when>
    

    MfG, Thomas