XSLT – 正则表达式替换字符
发布时间:2020-12-14 05:49:29 所属栏目:百科 来源:网络整理
导读:我有一个这样的样本xsl, doc paratext . . .text/para paratext . . .text. . . . . .text/para/doc 正如你所看到的,xml中有一些模式就像. . . 我需要的是用*替换点之间存在的空间.所以输出应该是这样的, doc paratext .*.*.text/para paratext .*.*.text.*.
我有一个这样的样本xsl,
<doc> <para>text . . .text</para> <para>text . . .text. . . . . .text</para> </doc> 正如你所看到的,xml中有一些模式就像. . . <doc> <para>text .*.*.text</para> <para>text .*.*.text.*.*.*.*.*.text</para> </doc> 我为此写了以下xslt, <xsl:template match="text()"> <xsl:analyze-string select="." regex="(.)( )(.)"> <xsl:matching-substring> <xsl:value-of select="replace(.,regex-group(2),'*')"/> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> 但它消除了所有其他空间,并给我以下结果, <doc> <para>text .*. .text</para> <para>text .*. .text.*. .*. .*.text</para> </doc> 如何修改我的XSLT以获得正确的输出.. 解决方法
我认为
<xsl:template match="text()"> <xsl:analyze-string select="." regex="(.)( )(.)( .)*"> <xsl:matching-substring> <xsl:value-of select="replace(.,' ','*')"/> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> 做的工作.正如LukStorms指出的那样,可以简化为 <xsl:template match="text()"> <xsl:analyze-string select="." regex=".( .)+"> <xsl:matching-substring> <xsl:value-of select="replace(.,'*')"/> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |