Wel, ik ben bezig met een nieuw project; een website dat op zSeries/Websphere draait. Er wordt o.a. XML gebruikt voor de communicatie tussen de website en diverse DB servers. Met behulp van XSL kan ik alle informatie uit XML van een mooi HTML jasje voorzien. Er worden voornamelijk tabellen gemaakt met behulp van <xsl:for-each>. Hieronder volgt een voorbeeldje:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <tr>
<td>
<table border="0" cellpadding="2" cellspacing="0" width="100%">
<th>kop 1</th>
<th>kop 2</th>
<xsl:for-each select="blaat">
<xsl:variable name="x">
<xsl:choose>
<xsl:when test="position() mod 2 = 1">bg_wit</xsl:when>
<xsl:otherwise>bg_blauw</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr class="{$x}">
<td>cel 1</td>
<td>cel 2</td>
<td>cel 3</td>
</tr>
</xsl:for-each>
</table>
</td>
</tr> |
Dit levert bijvoorbeeld op:
| kop 1 | kop 2 | | rij 1 col 1 | rij 1 col 2 | | rij 2 col 1 | rij 2 col 2 | | rij 3 col 1 | rij 3 col 2 |
|
Maar volgens de IBM layout-specs moet er een dunne blauwe streep onderaan de tabel worden toegevoegd, wanneer de laatste rij wit is. Ziehier het voorbeeld zoals het moet:
| kop 1 | kop 2 | | rij 1 col 1 | rij 1 col 2 | | rij 2 col 1 | rij 2 col 2 | | rij 3 col 1 | rij 3 col 2 |
|  |
|
Jullie snappen vast wel dat ik achteraf naar de laatste waarde van het variable $x moet kijken om te bepalen of die dunne blauwe streep eronder zou moeten komen. Ik heb het volgende geprobeerd:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| <tr>
<td>
<table border="0" cellpadding="2" cellspacing="0" width="100%">
<th>kop 1</th>
<th>kop 2</th>
<xsl:for-each select="blaat">
<xsl:variable name="x">
<xsl:choose>
<xsl:when test="position() mod 2 = 1">bg_wit</xsl:when>
<xsl:otherwise>bg_blauw</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr class="{$x}">
<td>cel 1</td>
<td>cel 2</td>
<td>cel 3</td>
</tr>
</xsl:for-each>
</table>
</td>
</tr>
<xsl:choose>
<xsl:when test="$x='hil'">
<tr height="1" class="bg_blauw">
<td><img src="//www.ibm.com/i/c.gif" /></td>
</tr>
</xsl:when>
</xsl:choose> |
Maar dan spuugt Websphere de volgende foutmelding uit in de errorlog
| Wed Jan 22 13:58:54 GMT+00:00 2003 Xml2html: getStylesheet: Transform stylesheet error=javax.xml.transform.TransformerConfigurationException: org.apache.xml.utils.WrappedRuntimeException: Could not find variable with the name of x |
Ik ben niet zo'n held met XSL, maar ik ben al gauw tot de conclusie gekomen dat de variable $x de groep <xsl:for-each> niet kan verlaten. Dus: hoe kan ik die variable $x uit de vorige groep meenemen? Ik heb al een uurtje zitten googlen en zitten 'spelen' met XSL, maar nee.. Hier in mijn omgeving is er maar één XSL guru, maar laat hij nou op wintersport zijn en de XSL Bible in zijn kast opgesloten te hebben

Hierbij dus mijn beroep op jullie
Natuurlijk zijn er (nasty) workarounds mogelijk, zoals achter elke rij standaard een 1px bg_blue lijntje mee te geven, maar dat is natuurlijk niet de bedoeling
[
Voor 3% gewijzigd door
BalusC op 22-01-2003 15:26
. Reden: cellpadding="2" toegevoegd.. ]