Jan Huss: <fo:block> in Verbindung mit <xsl:for-each> (Anfänger)

Hallo,

um in XSL:fo einen bestimmten Wert auszugeben nutze ich zum Beispiel

fo:block
 <xsl:value-of select="//person/name"/>
</fo:block>

. Möchte ich jedoch dies tun:

<xsl:for-each select="//person/phone">
xsl:choose
 <xsl:when test="@key='cellular'">fo:block
  Handy: <xsl:value-of select="//person/phone"/>
 </fo:block></xsl:when>

<xsl:when test="@key='buero'">fo:block
  Dienstlich: <xsl:value-of select="//person/phone"/>
 </fo:block></xsl:when>
</xsl:choose>
</xsl:for-each>

so gibt er mir zwar ordentlich Handy bzw. Dienstlich aus, den Wert bekomme ich jedoch nicht ausgegeben.

Was mache ich falsch?

Danke für die Hilfe.

Gruß Jan

  1. Pff,

    hab meinen Rechner neu starten müssen; jetzt geht es...

    Gruß Jan

  2. Hallo,

    um in XSL:fo einen bestimmten Wert auszugeben nutze ich zum Beispiel

    » . Möchte ich jedoch dies tun:

    <xsl:for-each select="//person/phone">
    xsl:choose
    <xsl:when test="@key='cellular'">fo:block
      Handy: <xsl:value-of select="//person/phone"/>
    </fo:block></xsl:when>

    <xsl:when test="@key='buero'">fo:block
      Dienstlich: <xsl:value-of select="//person/phone"/>
    </fo:block></xsl:when>
    </xsl:choose>
    </xsl:for-each>

    nur als anmerkung: dies ist genau der fall wo man nicht mit for-each arbeiten sollte:
    also ich gehe hier davon aus, dass es bei dir <person> in unterschiedlichen elternelementen vorkommt. sonst wäre //person eine reine performanceverschwendung.

    damit:
    <xsl:for-each select="//person/phone">
    xsl:choose
     <xsl:when test="@key='cellular'">fo:block
      Handy: <xsl:value-of select="//person/phone"/> <--also hiermit
     </fo:block></xsl:when>

    gibst du für jede einzele person die handy nummer von *allen* personen aus.
    besser wäre:
    <xsl:template match="phone">
    xsl:choose
     <xsl:when test="@key='cellular'">fo:block
      Handy: <xsl:value-of select="."/>
     </fo:block></xsl:when>

    <xsl:when test="@key='buero'">fo:block
      Dienstlich: <xsl:value-of select="."/>
     </fo:block></xsl:when>
    </xsl:choose>
    </xsl:template>
    ------
    oder wenn du schon alles per for-each abfragst (und <person> immer das selbe elternelement hat), dann solltes du innerhalb vom elternelement von <person> sein und so machen:
    <xsl:for-each select="person/phone">
    xsl:choose
     <xsl:when test="@key='cellular'">fo:block
      Handy: <xsl:value-of select="."/>
     </fo:block></xsl:when>

    <xsl:when test="@key='buero'">fo:block
      Dienstlich: <xsl:value-of select="."/>
     </fo:block></xsl:when>
    </xsl:choose>
    </xsl:for-each>

    wie gesagt, als anmerkung.

    grüße
    thomas