xsl:choose und Attribute

Von: , Frage gestellt am Mo, 8. Mai 2006
Hi Zusammen,
ich möchte in XSLT Elemente in Abhängigkeit vom Attribut ausgeben. Versucht habe ich es bisher so:

<xsl:template match="Symbol">
<xsl:choose>
<xsl:when test="@stopp" >
<fo:list-block
start-indent="30pt"
provisional-distance-between-starts="20pt"
provisional-label-separation="10pt">

<fo:list-item>

<fo:list-item-label >
<fo:block>S </fo:block>
</fo:list-item-label>

<fo:list-item-body start-indent="body-start()">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:list-item-body>

</fo:list-item>
</fo:list-block>
</xsl:when>
<xsl:otherwise>
<fo:list-block
start-indent="30pt"
provisional-distance-between-starts="20pt"
provisional-label-separation="10pt">

<fo:list-item>
<fo:list-item-label >
<fo:block>N </fo:block>
</fo:list-item-label>

<fo:list-item-body start-indent="body-start()">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:list-item-body>

</fo:list-item>
</fo:list-block>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

Funktioniert aber leider nicht.
Kann mir jemand sagen warum?

Grüße

Tobey

4 Antworten zu dieser Frage

  1. Antwort von nach 5 Stunden 0 hilfreich
    Re: xsl:choose und Attribute
    Hallo, ich möchte in XSLT Elemente in Abhängigkeit vom Attribut
    ausgeben. Versucht habe ich es bisher so:
    ...
    Funktioniert aber leider nicht.
    was genau funktioniert denn nicht?
    <?xml version="1.0"?>
    <test>
      <abc stopp="yes">
      </abc>
      <abc>
      </abc>
    </test>
    

    als XML, und
    <xsl:template match="/">
    <html>
    <body>
      <xsl:for-each select="/test/abc">
        <xsl:choose>
          <xsl:when test="@stopp">
            <p>Stopp found</p>
          </xsl:when>
          <xsl:otherwise>
            <p>No Stopp found</p>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </body>
    </html>
    </xsl:template>
    

    ergibt bei mir
    <html>
    <body>
    <p>Stopp found</p>
    <p>No Stopp found</p>
    </body>
    </html>
    

    als Ergebnis.

    gruß
    Heavy
    • Antwort von nach 8 Stunden 0 hilfreich
      Re^2: xsl:choose und Attribute
      Hi,
      Danke für die Antwort.
      Wenn ich das richtig sehe, wird bei Deiner Lösung getestet ob ein Element ein Attibut hat oder nicht.
      Habe mich wahrscheinlich etwas unpräzise ausgedrückt.
      Ich wollte abhängig vom Wert des Attributes, <!AttLIST Symbol symbol "stopp|notiz">, einer Liste ein entsprechndes Zeichen als Präfix voranstellen. Hab ich hier mit S oder N geschrieben.

      Bei meiner Lösung bekommen alle Symbol-Listen ein N vorangestellt, auch die mit dem Attribut-Wert stopp.

      Ich habe mal da gesamte Template beigefügt.

      <xsl:template match="Symbol">
      <fo:block>
      <xsl:choose>
      <xsl:when test="@stopp" >
      <fo:list-block>
      <fo:list-item>

      <fo:list-item-label >
      <fo:block>
      S
      </fo:block>
      </fo:list-item-label>

      <fo:list-item-body>
      <fo:block ><xsl:value-of select="."/></fo:block>
      </fo:list-item-body>

      </fo:list-item>
      </fo:list-block>
      </xsl:when>
      <xsl:otherwise>
      <fo:list-block
      start-indent="10mm"
      provisional-distance-between-starts="20pt"
      provisional-label-separation="10pt">

      <fo:list-item>
      <fo:list-item-label>
      <fo:block >
      N
      </fo:block>
      </fo:list-item-label>

      <fo:list-item-body start-indent="body-start()">
      <fo:block><xsl:value-of select="."/></fo:block>
      </fo:list-item-body>

      </fo:list-item>
      </fo:list-block>
      </xsl:otherwise>
      </xsl:choose>
      </fo:block>
      </xsl:template>

      Danke schonmal

      Wünsche noch einen schönen Abend

      tobey [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
      • Antwort von nach 17 Stunden 0 hilfreich
        Re^3: xsl:choose und Attribute
        Wenn ich das richtig sehe, wird bei Deiner Lösung getestet ob
        ein Element ein Attibut hat oder nicht.
        bei deiner auch :-) Habe mich wahrscheinlich etwas unpräzise ausgedrückt.
        Ich wollte abhängig vom Wert des Attributes, <!AttLIST
        Symbol symbol "stopp|notiz">, einer Liste ein entsprechndes
        Zeichen als Präfix voranstellen. Hab ich hier mit S oder N
        geschrieben.
        Wenn du den Attributwert vergleichen willst muß das Beispiel etwas angepasst werden:
          <xsl:choose>
            <xsl:when test="@attributeName='stopp'">
            S
            </xsl:when>
            <xsl:otherwise>
            N
            </xsl:otherwise>
          </xsl:choose>
        

        Statt des Attributnamens kannst du auch * eintragen, wenn das ganze unabhängig vom Namen funktionieren soll.

        HTH
        Heavy
        • Antwort von nach 19 Stunden 0 hilfreich
          Re^4: xsl:choose und Attribute
          Wenn ich das richtig sehe, wird bei Deiner Lösung getestet ob
          ein Element ein Attibut hat oder nicht.
          bei deiner auch :-)
          Stimmt ;-) Wenn du den Attributwert vergleichen willst muß das Beispiel
          etwas angepasst werden:
            <xsl:choose>
              <xsl:when test="@attributeName='stopp'">
              S
              </xsl:when>
              <xsl:otherwise>
              N
              </xsl:otherwise>
            </xsl:choose>
          

          Statt des Attributnamens kannst du auch * eintragen, wenn das
          ganze unabhängig vom Namen funktionieren soll.

          HTH
          Heavy
          Funktioniert einwandfrei

          Vielen Dank für die Hilfe und noch eine schönen Tag

          Tobey
Keine passende Antwort gefunden? Jetzt eigene Frage stellen!