2016-01-31 46 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> 

最后文本模板只匹配的文本包含“”不跟空间