2016-01-31 77 views
1

我需要找到','文本,這些文本之後沒有空格,並且在XSLT中爲每個文本明確地添加了一個空格值。XSLT正則表達式 - 之後沒有

例如:

輸入:

<chap> 
    <para>10,20,30,40,50,60,</para> 
    <para>10, 20, 30, 40, 50, 60</para> 
</chap> 

輸出:

<chap>  
    <para>10,&#160;20,&#160;30,&#160;40,&#160;50,&#160;60,&#160;60,&#160;</para> 
    <para>10, 20, 30, 40, 50, 60</para> 
</chap> 

XSLT

<xsl:template match="text()">   
    <xsl:analyze-string select="." regex=",(?!\s)"> 
     <xsl:matching-substring> 
      <xsl:value-of select="."/> 
      <xsl:text>&#160;</xsl:text> 
     </xsl:matching-substring> 
    </xsl:analyze-string>  
</xsl:template> 

我可以使用正則表達式做這個任務,但任何人都可以建議我我該如何發現d ','文字女巫是不是跟着space字符?

+1

你可以用'「,」'分隔文本,然後搜索任何'「,」'並且給它們添加'「」' – pouyan

回答

2

我會做

string-join(tokenize($in, ',\s*'), ', ')

這假設是可以接受用逗號後更換多個空格單一空間。

(剛注意到@pouyan已經在評論中提出了這種方法)。

3

可以使用replace()功能來代替後跟一個非空白字符逗號,說$x,用逗號+ &#160; +非空格字符$x

<xsl:template match="para"> 
    <xsl:copy> 
     <xsl:value-of select="replace(.,',(\S)',',&#160;$1')"/> 
    </xsl:copy> 
</xsl:template> 

xsltransform demo

0

這是一個支持exslt的xslt-1.0解決方案:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:fn="http://www.w3.org/2005/xpath-functions" 
       xmlns:str="http://exslt.org/strings" 
       extension-element-prefixes="fn str"> 

    <xsl:output method="xml" version="1.0" indent="yes"/> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="/node()"/> 
    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:element name="{name(.)}"> 
      <xsl:copy-of select="./@*"/> 
      <xsl:apply-templates select="./node()"/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="text()"> 
     <xsl:value-of select="."/> 
    </xsl:template> 

    <xsl:template match="text()[contains(., ',')][count(str:split(., ',')) &gt; count(str:split(., ', '))]"> 
     <xsl:choose> 
      <xsl:when test="contains(., ',')"> 
       <xsl:for-each select="str:tokenize(., ', ')"> 
        <xsl:value-of select="."/> 

        <xsl:if test="position() != last()"> 
         <xsl:text>, </xsl:text> 
        </xsl:if> 
       </xsl:for-each> 
      </xsl:when> 

      <xsl:otherwise> 
       <xsl:value-of select="."/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

最後文本模板只匹配的文本包含「」不跟空間