2012-04-16 58 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