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