2012-04-16 52 views
3

我在XSL这个功能我从这个postXSL复制与子

了更换“CR”与“换行”

这是我如何称呼它:

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

IM做这样的文章链接到“更多”的文本中单击 文章的短启动的第一个div 显示像我没有使用“insertBreaks”功能

文本(长条550个字)
<xsl:copy-of select="substring($breakText,0,550)"/> 

但此行的长说明的是工作的罚款:

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

我在哪里错了?

回答

0

溶液中使用中提到的问题恰好是矿。

它取代换行符与“换行”,但有<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()或转换为字符串产生只是一个字符串 - 和一个字符串不具有结构(所有节点都没有了)。

+0

感谢dimitre,但这不是我的问题 – 2012-04-16 13:13:02

+0

@ roy.d:请编辑问题并提供一个完整的(但尽可能小的)XML文档示例,XSLT转换和您得到的结果,以便人们可以重新生成问题 - 那么许多人将能够准确解释导致不需要输出的原因并提供正确的解决方案。 – 2012-04-16 13:16:27

+0

我编辑我有的问题,xml也不是问题。我使用像我上面写的函数将\ r \ n转换为
。 – 2012-04-17 05:18:09

2

你想用xsl:value-ofxsl:copy-ofxsl:copy-of返回所选标签的元素及其所有值。 xsl:value-of返回与所选标签关联的文本。既然你想获得一个子字符串,你想要的文本。

+0

它是如何在第二行,但在第一行? – 2012-04-16 09:54:24

+0

'$ breakText'可能指向一个元素。你可以对元素进行“复制”。你不能在元素上使用'substring',尽管只有它的文本,你当然不能对结果字符串进行'copy-of'。 – yamen 2012-04-16 09:56:04

+0

我怎么能显示文本后,我取代了我想在这两种情况子字符串和完整? – 2012-04-16 09:58:02