[ XSLT (/Sablotron) ] auto indenting probs met een textarea

Pagina: 1
Acties:

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
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:
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.

Noushka's Magnificent Dream | Unity


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

De linefeeds (en spaties) rond <xsl:apply-templates select="value" /> weghalen?

seweso's blog


  • Sendy
  • Registratie: September 2001
  • Niet online
En het probleem is nu dat de tekst die je ziet in de textarea in je browser een stuk naar rechts is geschoven?

Je probleem is dus niet duidelijk. Ik zie dat het textarea stukje in je xslt de template "value" applyt. Levert die de code
code:
1
<b>test</b>
op?
Kan je ook een voorbeeld van de 'html' bende geven? Ik ben wel benieuwd eigenlijk.

[ Voor 19% gewijzigd door Sendy op 28-02-2004 17:09 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
seweso schreef op 28 februari 2004 @ 17:02:
De linefeeds (en spaties) rond <xsl:apply-templates select="value" /> weghalen?
Nee, dat had ik al geprobeerd. Dat maakt verder niets uit.
Sendy schreef op 28 februari 2004 @ 17:08:
En het probleem is nu dat de tekst die je ziet in de textarea in je browser een stuk naar rechts is geschoven?

Je probleem is dus niet duidelijk. Ik zie dat het textarea stukje in je xslt de template "value" applyt. Levert die de code
code:
1
<b>test</b>
op?
Kan je ook een voorbeeld van de 'html' bende geven? Ik ben wel benieuwd eigenlijk.
code:
1
2
3
4
5
6
7
8
<form id="edit_form" method="post" action="handlers/edit.php"><input type="hidden" name="module" value="news" /><input type="hidden" name="id" value="1" /><table class="item-table" cellpadding="0" cellspacing="1">
<tr><td class="item-field">ID:</td><td class="item-value"><input type="text" name="id" value="1" readonly="readonly" /></td></tr>
<tr><td class="item-field">Test:</td><td class="item-value"><select name="test"><option value="1">Yes</option><option value="0" selected="selected">No*</option></select></td></tr>
<tr><td class="item-field">Language:</td><td class="item-value"><select name="language_id"><option value="1" selected="selected">nederlands*</option></select></td></tr>
<tr><td class="item-field">Parent:</td><td class="item-value"><select name="parent_id"><option value="1" selected="selected">first_parent*</option><option value="2">second_parent</option><option value="3">third_parent</option></select></td></tr>
<tr><td class="item-field">Small text:</td><td class="item-value"><textarea name="text" cols="40" rows="5"><b>test</b></textarea></td></tr>
<tr><td class="item-field">Big text:</td><td class="item-value"><textarea name="big_text" cols="60" rows="10"></textarea></td></tr>
</table></form>

Dit is het gehele formulier zoals de parser hem aan de browser levert. Zo klopt het dus wel, (ik heb de tabel rijen even op een nieuwe regel gezet omdat de layout anders wel erg verschoven wordt en de code helemaal niet meer leesbaar is)

En ik heb nog een template die wel van belang is mbt. apply-templates:
code:
1
2
3
4
5
6
7
8
<xsl:template match="*">
    <xsl:element name="{name(.)}">
        <xsl:for-each select="@*">
            <xsl:attribute name="{name(.)}"><xsl:value-of select="."/></xsl:attribute>
        </xsl:for-each>
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

Ook deze heb ik herschreven naar een versie zonder spaties en tabs, maar dat mocht ook niet helpen.

Noushka's Magnificent Dream | Unity