How to transform xml and keep newlines?
I'm trying to preserve row breaks in an xml file when transforming it to html, but I cant find a way that works.
<meta>
<name>Message</name>
<value>Hi!
I ne开发者_运维问答ed info!
Mr Test</value>
</meta>
And I use this xsl:
<xsl:if test="name='Message'">
<tr>
<th align="left" colspan="2">Message:</th>
</tr>
<tr>
<td colspan="2"><xsl:value-of select="value"/></td>
</tr>
</xsl:if>
But the new line (cr/lf) characters dissapear, and everything becomes one single line in html. Is is possible to match the cr/lf and replace them with html "<_br >", or any other method?
Add the following template to your XSL:-
<xsl:template name="LFsToBRs">
<xsl:param name="input" />
<xsl:choose>
<xsl:when test="contains($input, ' ')">
<xsl:value-of select="substring-before($input, ' ')" /><br />
<xsl:call-template name="LFsToBRs">
<xsl:with-param name="input" select="substring-after($input, ' ')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$input" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Now replace where select the value with a call to this template:-
<td colspan="2">
<xsl:call-template name="LFsToBRs">
<xsl:with-param name="input" select="value"/>
</xsl:call-template>
</td>
Greetings, if you already have LF or CR in the source xml (looks like you have), try putting in a with "white-space: pre" style.
i.e:
<div style="white-space: pre;">
<xsl:value-of select="value"/>
</div>
精彩评论