【发布时间】:2012-08-03 03:55:43
【问题描述】:
我无法让它工作。我已经看过所有关于堆栈溢出的示例并理解 xslt 代码。但由于某种原因,它正在替换我的空格字符而不是新行。
<t>Line1 Is here
Line2 Is another
Line3 Is some more
</t>
XSLT 模板是
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="t">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="text()" name="insertBreaks">
<xsl:param name="pText" select="."/>
<xsl:choose>
<xsl:when test="not(contains($pText, '
'))">
<xsl:copy-of select="$pText"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($pText, '
')"/>
<br />
<xsl:call-template name="insertBreaks">
<xsl:with-param name="pText" select=
"substring-after($pText, '
')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
我得到的结果是这样的
Line1
Is
here Line2
Is
another Line3
Is
some
more
在此处查看我的示例http://www.xsltcake.com/slices/VsPbib
它似乎是替换空格字符而不是换行符。
【问题讨论】:
-
我无法重现该问题。只需复制并粘贴提供的 XML 文档和 XSLT 转换,然后在该 XML 文档上运行转换,我得到以下结果:
Line1 在这里
并且浏览器显示为:
Line2 是另一个
Line3 是更多Line1 在这里
我得到相同的结果我在计算机上安装的所有 11 个 XSLT 处理器:MSXML 3/4/6、.NET XslCompiledTransform 和 .NET XslTransform、AltovaXML (XML-SPY)、Saxon 6.5.4、Saxon 9.1.07、Saxon 9.1。 .NET 为 07,XSLT 2 为 AltovaXML。
Line2 是另一个
Line3 是更多