开发者

How to transform xml and keep newlines?

开发者 https://www.devze.com 2022-12-13 11:26 出处:网络
I\'m trying to preserve row breaks in an xml file when transforming it to html, but I cant find a way that works.

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, '&#10;')">
            <xsl:value-of select="substring-before($input, '&#10;')" /><br />
            <xsl:call-template name="LFsToBRs">
                <xsl:with-param name="input" select="substring-after($input, '&#10;')" />
            </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>
0

精彩评论

暂无评论...
验证码 换一张
取 消