2013-12-12 49 views
0

我有一個像下面的XML行。申請模板選擇子字符串後

<title>I. DEFINITION</title> 

我在這裏做什麼之前獲得的價值「‘這是不錯,但我想申請,模板後的內容’。」。我無法知道我該怎麼做。我正在使用下面的XSLT行。

<xsl:apply-templates select="substring-after(.,'. ')"/> 

當我使用它,拋出一個錯誤,這是

XSLT 2.0 Debugging Error: Error: file:///C:/Users/u0138039/Desktop/Proview/HK/ArchboldHK2014/XSLT/Chapters.xsl:508: Not a node item - item has type xs:string with value 'DEFINITION' - Details: -  XTTE0520: The result of evaluating the 'select' attribute of the <xsl:apply-templates> instruction may only contain nodes 

請讓我知道我可以申請模板後的內容「」

謝謝。

回答

1

你可以試試這個模板

<xsl:template match="title"> 
    <xsl:copy> 
     <label><xsl:value-of select="substring-before(., '. ')"/></label> 
     <caption> 
     <xsl:variable name="slicetext" select="substring-after(current()/text()[1], '. ')"/> 
     <xsl:value-of select="$slicetext"/><xsl:apply-templates select="text()[position() > 1]|child::node()[not(self::text())]"/> 
     </caption> 
    </xsl:copy> 
</xsl:template> 
0

使用XSLT 1.0和2.0,您只能爲節點編寫和應用模板,而不是像字符串這樣的原始值。我認爲這在XSLT 3.0中發生了變化。

在XSLT 2.0中,爲了處理子字符串的結果 - 進一步之後,您需要編寫一個函數或帶有字符串參數的命名模板。

如果您確實想要應用模板,您首先需要使用xsl:variable創建臨時文本節點。