Xslt 带子字符串的的的xsl副本

Xslt 带子字符串的的的xsl副本,xslt,xslt-1.0,Xslt,Xslt 1.0,我在xsl中有这个函数,我从这个 将“cr”替换为“断线” 我这样称呼它: <xsl:variable name="breakText"> <xsl:call-template name="insertBreaks"> <xsl:with-param name="subject" select="PublicProfile/AboutMe"/> </xsl:call-template> &

我在xsl中有这个函数,我从这个

将“cr”替换为“断线”

我这样称呼它:

<xsl:variable name="breakText">
     <xsl:call-template name="insertBreaks"> 
          <xsl:with-param name="subject" select="PublicProfile/AboutMe"/> 
         </xsl:call-template>
    </xsl:variable>

我做的就像一篇文章链接到“阅读更多”的文本点击 文章开头的第一部分(长文章550个字符) 显示文本,就像我没有使用“insertBreaks”功能一样


但这一行冗长的描述效果很好:

<xsl:copy-of select="$breakText"/>


我哪里错了?

您想使用
xsl:value of
而不是
xsl:copy of
xsl:copy of
返回所选标记的元素及其所有值
xsl:value of
返回与所选标记关联的文本。由于您试图获取子字符串,因此需要文本。

问题中提到的解决方案恰好是我的

它不是用“换行符”替换换行符,而是用

元素替换换行符。元素是节点,而不是字符串

因此,本问题中定义的
$breakText
是XSLT 2.0中的临时树或XSLT 1.0中的RTF(结果树片段)——而不是字符串

问题在于(不管使用零作为索引的附带小错误):

是一个字符串(根据
$breakText
的字符串值计算),因此不能包含任何

元素或任何节点

记住:元素或树的字符串值是其所有文本节点后代值的串联

在另一边

<xsl:copy-of select="$breakText"/> 

复制临时树(在XSLT2.0中)或生成RTF的序列化(在XSLT1.0中)


更简单地说,
xsl:copy of
保留结构,
string()
或任何对字符串的转换只生成一个字符串,而字符串没有结构(所有节点都消失了)。

$breakText
可能指向一个元素。您可以对元素执行
复制。您不能对元素执行
substring
,只能对其文本执行,当然也不能对结果字符串执行
copy
。在替换了substring和full两种情况下所需的内容后,如何显示文本?@roy.d:请编辑问题并提供完整(但尽可能小)的XML文档示例,XSLT转换和您得到的结果,这样人们就可以重新处理问题——然后许多人就能够准确地解释导致不需要的输出的原因并提供正确的解决方案。我编辑了我遇到的问题,xml也不是问题所在。我使用上面写的函数将\r\n转换为
。@roy.d:我相应地编辑了答案,解释了复制节点集和将其转换为字符串之间的区别。这就是问题的原因。要解决这个问题,我调用带有substring参数的函数text@roy.d当前位置我很高兴我的回答有用。
substring($breakText,0,550)
<xsl:copy-of select="$breakText"/>