我在ASP中使用XSLT,它由msxml6提供服务.
加载到对象的传入XML有"回车",我认为可能是ASCII 10.我想将它们转换<br/>为输出.
我试图 在传入的XML中检测,但似乎无法找到.我试过Javascript(ASP内部的JScript),但无济于事.
有趣的是,它来自MS Excel电子表格.
想法:
<br/>?谢谢大家,stackoverflow很棒!!
小智 6
来自http://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends
XML解析的实体通常存储在计算机文件中,为方便编辑,这些文件被组织成行.这些行通常由字符CARRIAGE RETURN(#xD)和LINE FEED(#xA)的某种组合分隔.
为了简化的应用程序的任务,XML处理器必须表现得好像它在归一外部解析实体(包括文件实体)上输入所有换行符,解析之前,通过平移二者两个字符序列#xD #xA和任何
#xD其#xA后面没有单个#xA字符.
所以,可以寻找
(或 ).但请注意,根据XML树提供程序(MSXSL XML解析器不保留此文本节点),输入中的空白文本节点可能会保留也可能不会保留.当然,不保留仅空白区域的文本节点.
然后,这个text命名模板用brXSLT 1.0中的空元素替换新行:
<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>
Run Code Online (Sandbox Code Playgroud)
有了这个输入:
<root>
<text>
whatever
</text>
<text>and more</text>
</root>
Run Code Online (Sandbox Code Playgroud)
输出:
<root>
<text><br />whatever<br /></text>
<text>and more</text>
</root>
Run Code Online (Sandbox Code Playgroud)