我正在尝试在将其转换为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;”或任何其他方法替换它们?
答案 0 :(得分:19)
将以下模板添加到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>
现在替换通过调用此模板选择值的位置: -
<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>