如何转换xml并保留换行符?

时间:2009-12-09 11:57:40

标签: html xml xslt

我正在尝试在将其转换为html时保留xml文件中的换行符,但我找不到可行的方法。

<meta>
    <name>Message</name>
    <value>Hi!

    I need info!

    Mr Test</value>
</meta>

我使用这个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>

但新行(cr / lf)字符消失了,一切都变成了html中的一行。是否可以匹配cr / lf并用html“&lt; _br&gt;”或任何其他方法替换它们?

2 个答案:

答案 0 :(得分:19)

将以下模板添加到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>

现在替换通过调用此模板选择值的位置: -

<td colspan="2">
    <xsl:call-template name="LFsToBRs">
        <xsl:with-param name="input" select="value"/>
    </xsl:call-template>
</td>

答案 1 :(得分:6)

问候,如果您在源xml中已经有LF或CR(看起来像你有), 尝试使用“white-space:pre”风格。

即:

<div style="white-space: pre;">
  <xsl:value-of select="value"/>
</div>