我在ASP中使用XSLT,它由msxml6提供服务。
加载到对象的传入XML有“回车”,我认为可能是ASCII 10.我想在输出中将它们转换为<br/>
。
我正在尝试检测传入XML中的
,但似乎无法找到它。我试过Javascript(ASP内部的JScript),但没有用。
有趣的是,它来自MS Excel电子表格。
想法:
<br/>
?谢谢大家,stackoverflow很棒!!
答案 0 :(得分:6)
来自http://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends
经常存储XML解析的实体 在计算机文件中,用于编辑 方便,组织成行。 这些线通常由分隔线组成 某些角色的组合 CARRIAGE RETURN(#xD)和LINE FEED (#xA)。
为了简化应用程序的任务, XML处理器必须表现得像它一样 规范化外部的所有换行符 解析实体(包括 文件实体)在输入之前 解析,翻译两者 双字符序列#xD #xA和任何 #{1}}后面没有#xA到单个#xA字符。
因此,可以查找#xD
(或

)。但请注意,根据XML树提供程序(MSXSL XML解析器不保留此文本节点),输入中的空白文本节点可能会保留也可能不会保留。当然,不保留仅空白区域的文本节点。
然后,这个
命名模板在XSLT 1.0中用空text
元素替换新行:
br
使用此输入:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" name="text">
<xsl:param name="pString" select="."/>
<xsl:choose>
<xsl:when test="contains($pString,'
')">
<xsl:call-template name="text">
<xsl:with-param name="pString"
select="substring-before($pString,'
')"/>
</xsl:call-template>
<br/>
<xsl:call-template name="text">
<xsl:with-param name="pString"
select="substring-after($pString,'
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pString"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出:
<root>
<text>
whatever
</text>
<text>and more</text>
</root>
答案 1 :(得分:0)
replace(replace(replace(XMLString, vbCrLf, ""), vbCr, ""), vbLf, "")
答案 2 :(得分:-1)
以下是我用来执行此操作的模板:
<xsl:template name="nl2br">
<xsl:param name="contents" />
<xsl:choose>
<xsl:when test="contains($contents, ' ')">
<xsl:value-of select="substring-before($contents, ' ')" disable-output-escaping="yes" />
<br />
<xsl:call-template name="nl2br">
<xsl:with-param name="contents" select="substring-after($contents, ' ')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$contents" disable-output-escaping="yes" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>