2013-10-31 70 views
1

有沒有辦法通過將子元素轉換爲字符串來包裝某個節點的特定部分而不丟失子元素?XSLT:將文本換行而不轉換爲字符串

這就是我得到了:

<root> 
    <caption>Figure 3.1 Description of an Image, sometimes with <inline>Bold</inline> or <inline>Italic</inline> emphases.</caption> 
</root> 

......而這正是我需要的:

<root> 
    <caption><inline>Figure 3.1</inline>Description of an Image, sometimes with <inline>Bold</inline> or <inline>Italic</inline> emphases.</caption> 
</root> 

我因子評分關於使用正則表達式^Figure\s[0-9]+.[0-9]+捕獲不同的變化(例如圖11.10)並嘗試了幾個小時來解決問題,但不能刪除以下<inline>的......這是不可能的?

我正在使用XSLT 2.0!

謝謝!

回答

3

寫模板中的文本節點

<xsl:template match="caption/text()"> 
    <xsl:analyze-string select="." regex="^Figure\s[0-9]+\.[0-9]+"> 
    <xsl:matching-substring> 
     <inline><xsl:value-of select="."/></inline> 
    </xsl:matching-substring> 
    <xsl:non-matching-substring> 
     <xsl:value-of select="."/> 
    </xsl:non-matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 

當然你開始樣式與身份轉換模板:

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 
+0

謝謝!工作得很好!我之前嘗試過相同的解決方案,但因「圖」和Numbers之間的ThinSpace(&#x2009;)而失敗... –