带有子字符串的 XSL 复制



我在 XSL 中有这个函数,我从这篇文章中获取了这个函数

将"CR"替换为"换行符"

我是这样称呼它的:

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

我像文章链接一样在文本单击上"阅读更多"文章短开头的第一个div(长文章的 550 个字符)显示文本,就像我没有使用"插入中断"功能一样

<xsl:copy-of select="substring($breakText,0,550)"/>

但是长描述的这一行工作正常:

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

我错在哪里?

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

问题中使用的解决方案恰好是我的。

它不是用"换行符"而是用<br />元素替换换行符。元素是一个节点 - 而不是一个字符串。

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

问题是(不管使用零作为索引的伴随小错误):

substring($breakText,0,550)

是一个字符串(根据字符串值 $breakText 计算),因此不能包含任何<br/>元素或任何节点

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

另一边

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

复制临时树(在 XSLT 2.0 中)或生成 RTF 的序列化(在 XSLT 1.0 中)。

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

相关内容

  • 没有找到相关文章

最新更新