我需要查找未跟空格的','
文本,并在XSLT中为每个文本显式添加空格值。
示例:
输入:
<chap>
<para>10,20,30,40,50,60,</para>
<para>10, 20, 30, 40, 50, 60</para>
</chap>
输出:
<chap>
<para>10, 20, 30, 40, 50, 60, 60, </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> </xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
我可以使用正则表达式执行此任务,但是任何人都可以建议我如何才能找到','
字符后面没有space
字符的文本?
答案 0 :(得分:3)
答案 1 :(得分:2)
我愿意
string-join(tokenize($in, ',\s*'), ', ')
这假设用逗号替换单个空格后的多个空格是可以接受的。
(注意到@pouyan已经在评论中提出了这种方法)。
答案 2 :(得分: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(., ',')) > 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>
最后一个文本模板仅匹配包含“,”后面没有空格的文本