Thomas J.S.: <fo:block> in Verbindung mit <xsl:for-each> (Anfänger)

Beitrag lesen

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