Ik ben bezig om vanuit een XML data een formulier te transformeren met behulp van XSLT. Ik ben namelijk met een CMS bezig dat werkt met modules en dat afhankelijk van de gedefineerde velden een formulier moet kunnen maken.
Nu lukt dit allemaal best aardig, ik ben nu alleen op een probleem gestuit bij het maken van een textarea element. Ik heb de indent optie op yes staan en de parser waar ik het gehele zaakje doorheen haal (Sablotron) doet dit allemaal best netjes, iets te netjes, want voor en na de inhoud van een textarea wordt ook een line-break gezet en wordt de inhoud met spaties netjes ge-indent. Dat is natuurlijk niet de bedoeling. Als ik de indent optie op no zet, werkt het wel goed, maar dan is de HTML output een grote bende en daar ben ik nu ook weer niet zo blij mee.
De template die een tekst veld transformeert:
Het verkeerde resultaat:
Het juiste resultaat:
Iemand mischien een idee hoe ik het goed kan oplossen. Ik zat zelf eerst te denken aan xsl:strip-space, maar dat geld alleen voor elementen in het source document en dit is puur een questie in de output. Ik weet wel dat het indenten eigenlijk puur aan de parser zelf is hoe die dit oplost, maar mischien dat er toch een manier is om het wel goed te krijgen.
Nu lukt dit allemaal best aardig, ik ben nu alleen op een probleem gestuit bij het maken van een textarea element. Ik heb de indent optie op yes staan en de parser waar ik het gehele zaakje doorheen haal (Sablotron) doet dit allemaal best netjes, iets te netjes, want voor en na de inhoud van een textarea wordt ook een line-break gezet en wordt de inhoud met spaties netjes ge-indent. Dat is natuurlijk niet de bedoeling. Als ik de indent optie op no zet, werkt het wel goed, maar dan is de HTML output een grote bende en daar ben ik nu ook weer niet zo blij mee.
De template die een tekst veld transformeert:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <xsl:template match="stext_area">
<tr>
<td class="item-field"><xsl:value-of select="title"/>:</td>
<td class="item-value">
<textarea name="{name}" cols="40" rows="5">
<xsl:if test="change != 1">
<xsl:attribute name="readonly">readonly</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="value" />
</textarea>
</td>
</tr>
</xsl:template> |
Het verkeerde resultaat:
code:
1
2
3
| <textarea name="text" cols="40" rows="5">
<b>test</b>
</textarea> |
Het juiste resultaat:
code:
1
| <textarea name="text" cols="40" rows="5"><b>test</b></textarea> |
Iemand mischien een idee hoe ik het goed kan oplossen. Ik zat zelf eerst te denken aan xsl:strip-space, maar dat geld alleen voor elementen in het source document en dit is puur een questie in de output. Ik weet wel dat het indenten eigenlijk puur aan de parser zelf is hoe die dit oplost, maar mischien dat er toch een manier is om het wel goed te krijgen.