我在xsl中有这个功能,我从这个post
将“cr”替换为“line-break”
这就是我所说的:
<xsl:variable name="breakText">
<xsl:call-template name="insertBreaks">
<xsl:with-param name="subject" select="PublicProfile/AboutMe"/>
</xsl:call-template>
</xsl:variable>
我喜欢文章链接到“阅读更多”文字点击 文章的短暂开头的第一个div(长篇文章的550个字符) 显示文本,就像我没有使用“insertBreaks”函数
<xsl:copy-of select="substring($breakText,0,550)"/>
但长篇描述的这一行工作正常:
<xsl:copy-of select="$breakText"/>
我哪里错了?
答案 0 :(得分:2)
您想使用xsl:value-of
而不是xsl:copy-of
。 xsl:copy-of
返回所选标记的元素及其所有值。 xsl:value-of
返回与所选标记关联的文本。由于您正在尝试获取子字符串,因此您需要文本。
答案 1 :(得分:0)
问题中提到的解决方案恰好是我的。
它使用“换行符”替换换行符 not ,但使用<br />
元素替换。元素是节点 - 而不是字符串。
因此,此问题中定义的$breakText
是XSLT 1.0中的临时树(在XSLT 2.0中)或RTF(结果树片段) - 不是字符串。< / p>
问题在于(无论是否使用零作为索引的小错误):
substring($breakText,0,550)
是一个字符串(根据$breakText
的字符串值计算),因此不能包含任何<br/>
元素或任何节点
记住:元素或树的字符串值是其所有文本节点后代的值的串联。
另一方:
<xsl:copy-of select="$breakText"/>
复制临时树(在XSLT 2.0中)或生成RTF的序列化(在XSLT 1.0中)。
更简单地说,xsl:copy-of
保留结构,string()
或任何转换为字符串只会产生一个字符串 - 而字符串没有结构(所有节点消失了。)