zeilenumbruch erzwingen
Rondra
- xsl
0 MudGuard0 Rondra
0 Thomas J.S.0 Rondra0 MudGuard0 Thomas J.S.0 MudGuard
Hallo!
suche schon seit längerem und finde einfach nichts was mir helfen könnte.
ich bekomme vom Webserver einen XML Datenstrom, der mit meinen XSLs zu HTML transformiert wird.
Nun habe ich eine Tabelle , in deren zelle ich einen Nodeinhalt einfüge. Das problem ist nur, dass bei zu langen , ungebrochenen Inhalten des nodes, die zelle nicht umbrechen kann und so breit wird, dass mein Layout zerfetzt wird.
beispielhafter Nodeinhalt:
<MEINTEXT>BAGFSGHN1927235762835281978GR935829358790279583sjfjeif 3w583795278o20jf09395j2395798782487925hsihhf8a7983982058093AEtt983529053536569sjdugkwh8437593853hw84t74h
</MEINTEXT>
Wie ihr unschwer erkennen könnt, kann es sein dass der nodeinhalt nirgends ein leerzeichen enthalten kann, sodass kein sinnvoller zeilenumbruch über HTML oder CSS bordmittel erfolgen kann.
Ich muss aber nach 100 zeichen einen Zeilenumbruch erzwingen.
also habe ich Javascript zuhilfe genommen. Das ging auch problemlos bis mir mal ein anführungszeichen in diesem Node übermittelt worden ist. Damit kam mein JavaScript nicht klar. Habe es mit
<xsl:value-of select="translate(text(),'"','"')"/>
um die anf.zeichen zu codieren. aber es wird dann gar nicht mehr angezeigt.
Ihr seht das ist alles etwas komplexer :-/
Meine Frage kurz zusammengefasst: kann ich mit XSL bordmitteln den leerzeichenlosen Text nach jedem 100. zeichen umbrechen?
Hat jemand einen Tipp?
Vielen Dank!!
Rondra
Hi,
Meine Frage kurz zusammengefasst: kann ich mit XSL bordmitteln den leerzeichenlosen Text nach jedem 100. zeichen umbrechen?
Schreib ein Template, das sich selbst rekursiv aufruft:
Es bekommt den Text als Parameter übergeben.
Sind das weniger als 100 Zeichen (string-length), den String ausgeben und fertig.
Sonst:
Die ersten 100 Zeichen (substring) und einen Zeilenumbruch <br/> (oder ein Leerzeichen) ausgeben.
Dann sich selbst wieder aufrufen, wobei als Parameter der restliche Text (substring) übergeben wird.
cu,
Andreas
Danke Andreas, ich versuch das mal...
:-D
Hallo,
. Habe es mit
<xsl:value-of select="translate(text(),'"','"')"/>
um die anf.zeichen zu codieren. aber es wird dann gar nicht mehr angezeigt.
translate() ersetzt einzelen Zeichen, also bedeutet deine variante folgendes: ersetze im Text die Zeichen
& durch \
3 durch #
4 durch 3
; durch 4
Das ';' im dritten Argument wird ignoriert, weil das Argument länger ist als das zweite Argument. So viel in aller Kürze.
Ihr seht das ist alles etwas komplexer :-/
Nicht allzu sehr.
Meine Frage kurz zusammengefasst: kann ich mit XSL bordmitteln den leerzeichenlosen Text nach jedem 100. zeichen umbrechen?
Hat jemand einen Tipp?
<xsl:template name="makebreak">
<xsl:param name="text" />
<xsl:variable name="textafterbreak" select="substring($text, 101)" />
xsl:choose
<xsl:when test="string-length($text) > 100">
<xsl:value-of select="substring($text, 1, 100)" />
<br />
<xsl:call-template name="makebreak">
<xsl:with-param name="text" select="$textafterbreak" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="MEINTEXT">
<xsl:call-template name="makebreak">
<xsl:with-param name="text" select="." />
</xsl:call-template>
</xsl:template>
Grüße
Thomas
ohh, danke auch Dir Thomas!! Was für eine grosse Hilfe!! :))
Hi,
<xsl:value-of select="translate(text(),'"','"')"/>
translate() ersetzt einzelen Zeichen, also bedeutet deine variante folgendes: ersetze im Text die Zeichen
& durch \duch &
3 durch #
4 durch 3
; durch 4
Das ';' im dritten Argument wird ignoriert, weil das Argument länger ist als das zweite Argument. So viel in aller Kürze.
Wirklich?
Müßte es nicht " durch \ ersetzen und das " im dritten Parameter ignorieren?
Die Zeichenreferenz " sollte doch bereits durch den XML-Parser ersetzt werden, der das XSL einliest.
<xsl:template name="makebreak">
[...]
</xsl:template>
Diese Übung wollte ich eigentlich Rondra überlassen ...
cu,
Andreas
Hallo,
<xsl:value-of select="translate(text(),'"','"')"/>
translate() ersetzt einzelen Zeichen, also bedeutet deine variante folgendes: ersetze im Text die Zeichen
& durch \duch &
3 durch #
4 durch 3
; durch 4
Das ';' im dritten Argument wird ignoriert, weil das Argument länger ist als das zweite Argument. So viel in aller Kürze.Wirklich?
Nein. Natürlich nicht! Du hast recht.
(Ich _hasse_ es wenn ich Blödsinn erzähle!)
Müßte es nicht " durch \ ersetzen und das " im dritten Parameter ignorieren?
Genau das passiert.
<xsl:template name="makebreak">
[...]
</xsl:template>Diese Übung wollte ich eigentlich Rondra überlassen ...
Ich hatte das gerade zu Hand.
Grüße
Thomas
Hi,
Nein. Natürlich nicht! Du hast recht.
(Ich _hasse_ es wenn ich Blödsinn erzähle!)
;-) Ich hasse es auch.
cu,
Andreas