|
Subject: RE: [xsl] line breaks in XML data From: "Matthieu Ricaud" <matthieu.ricaud@xxxxxxx> Date: Fri, 21 Oct 2005 14:41:18 +0200 |
I used to have the same problem I think.
Tell me if I'm wrong : what you want is to preserve line breaks on the final
HTML output.
In html, lines breaks in the source are ignored : you need a <br/> element
so that the break can been seen in your browser (only textarea preserve the
source's line breaks ).
Then you need a template which replace every line break characters ("
")
by a <br/> element.
This couple of templates make this. (I don't remembre who I have it from)
<xsl:template name="lf2br">
<!-- import $StringToTransform -->
<xsl:param name="StringToTransform"/>
<xsl:choose>
<!-- string contains linefeed -->
<xsl:when test="contains($StringToTransform,'
')">
<!-- output substring that comes before the first linefeed -->
<!-- note: use of substring-before() function means -->
<!-- $StringToTransform will be treated as a string, -->
<!-- even if it is a node-set or result tree fragment. -->
<!-- So hopefully $StringToTransform is really a string! -->
<xsl:value-of select="substring-before($StringToTransform,'
')"/>
<!-- by putting a 'br' element in the result tree instead -->
<!-- of the linefeed character, a <br> will be output at -->
<!-- that point in the HTML -->
<br/>
<!-- repeat for the remainder of the original string -->
<xsl:call-template name="lf2br">
<xsl:with-param name="StringToTransform">
<xsl:value-of select="substring-after($StringToTransform,'
')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<!-- string does not contain newline, so just output it -->
<xsl:otherwise>
<xsl:value-of select="$StringToTransform"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
I defined another template to call like this :
<xsl:call-template name="CopyWithLineBreaks">
<xsl:with-param name="string" select="some_Xpath"/>
</xsl:call-template>
<xsl:template name="CopyWithLineBreaks">
<xsl:param name="string"/>
<xsl:variable name="Result">
<xsl:call-template name="lf2br">
<xsl:with-param name="StringToTransform" select="$string"/>
</xsl:call-template>
</xsl:variable>
<xsl:copy-of select="$Result"/>
</xsl:template>
Hope this help !
Matthieu.
-----Message d'origine-----
De : Emmanouil Batsis [mailto:Emmanouil.Batsis@xxxxxxxxxxx]
Envoyi : vendredi 21 octobre 2005 14:18
@ : xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Objet : Re: [xsl] line breaks in XML data
Jim Gay wrote:
> forgive my novice ineptitude.
>
> I am working on a project where we would like to preserve line breaks
> that are entered into our XML database.
In the root of your XML documents add xml:space="preserve". That should
force the XML parser to keep whitespace.
> We are doing our XSL transformations with version 1.
> If I use my XSLT to output/display this data into a <textarea>
> element, the line breaks found in the database are there when displayed.
> If I output to a simple <p> element, the line breaks are gone.
Use a <pre> instead of a <p>. You got me all confused now :-P
Manos
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] line breaks in XML data, Emmanouil Batsis | Thread | Re: [xsl] line breaks in XML data, António Mota |
| Re: [xsl] RE : [xsl] xsl namespace , David Carlisle | Date | Re: [xsl] Grouping-by appropriate v, omprakash . v |
| Month |