XML
Von: tоbеү, 8.5.2006 13:55 Uhr
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



  1. Antwort von Ηеаνү 0
    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
    3 Kommentare
    • von tоbеү 0
      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]
    • 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
    • von tоbеү 0
      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