2013-02-25 367 views
0

您好我有XML中的下面的行,也需要一個超鏈接的數字。我希望這個輸出以HTML格式顯示。拆分並連接XSLT中的字符串

<main> 
<alph>a b 2,3</alph> 
</main> 

我想要一個XSLT,讓輸出:

a b 2, a b 3 

我曾嘗試以下XSLT:

<xsl:template match="alph"> 
    <xsl:variable name="link" select="normalize-space(translate(
    normalize-space(current()),abcdefghijklmnopqrstuvwxyz,''))"/> 
    <xsl:value-of select="substring-before(normalize-space(.),$link)"/> 
    <xsl:variable name="tex"> 
    <xsl:value-of select="text()"/> 
    </xsl:variable> 
    <xsl:choose> 
    <xsl:when test="contains($link,',')"> 
     <xsl:variable name="new"> 
     <xsl:value-of select="tokenize($link,',')"/> 
     </xsl:variable> 
     <xsl:value-of select="concat($new,$tex)"/> 
    </xsl:when> 
    <xsl:when test="contains($link,'-')"> 
     <xsl:value-of select="tokenize($link,'-')"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$link"/> 
    </xsl:otherwise> 
    </xsl:choose> 

但它給我的輸出爲:

a b 2 3a b 2,3 

謝謝

你有
+0

我猜你正在使用XSLT 2.0? – 2013-02-25 15:13:17

+0

是的朋友我使用的是xslt 2.0。你可以請編輯或提供一個解決方案,如何做到這一點。請 – 2013-02-25 15:15:17

+0

請讓我知道如何在XSLT1.0中做到這一點,謝謝 – 2013-02-25 15:31:24

回答

1

的一個問題是與變量鏈接

<xsl:variable name="link" select="normalize-space(translate(
    normalize-space(current()),abcdefghijklmnopqrstuvwxyz,''))"/> 

它看起來像你正試圖從字符串中刪除所有字母,讓你剩下的只有2,3。然而,爲了這個工作,abc ... xyz需要用撇號括起來,否則它將尋找名稱爲的元素abc ... xyz。說了這麼多,你說你正在使用XSLT2.0,這樣你就可以使用的替代這裏功能,這需要一個正則表達式作爲參數

<xsl:variable name="link" select="normalize-space(replace(current(),'[a-z]',''))"/> 

接下來,你可以在此之前獲取文本鏈接,像這樣

<xsl:variable name="text" select="normalize-space(substring-before(current(), $link))"/> 

這會給你AB

最後,你可以使用tokenize函數分裂了2,3。在你的XSLT中,你似乎也在尋找連字符,但是tokenize函數也使用正則表達式,所以這不是問題。你能做的只是標記化的字符串,並使用文本變量作爲分隔符

<xsl:value-of select="concat($text, ' ')"/> 
    <xsl:value-of select="tokenize($link,',|-')" separator="{concat(', ', $text, ' ')}"/> 

這裏重新加入它是完整的XSLT

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:template match="alph"> 
     <xsl:variable name="link" select="normalize-space(replace(current(),'[a-z]',''))"/> 
     <xsl:variable name="text" select="normalize-space(substring-before(current(), $link))"/> 
     <xsl:value-of select="concat($text, ' ')"/> 
     <xsl:value-of select="tokenize($link,',|-')" separator="{concat(', ', $text, ' ')}"/> 
    </xsl:template> 
</xsl:stylesheet> 

當你的XML應用中,以下是輸出

a b 2, a b 3 
+0

感謝您的解決方案,這工作 – 2013-02-26 14:38:33