如何在XSLT模板中为以元音开头的$ClubName变量添加l'前缀?
如何在XSLT模板中为以元音开头的$ClubName变量添加l'前缀?
嘿,这个需求其实用XSLT的XPath表达式就能轻松搞定,我给你两种实用的方法,适配不同的XSLT版本:
方法一:兼容XSLT 1.0的条件判断法
如果你还在使用XSLT 1.0(没有原生正则支持),可以用starts-with结合translate来处理大小写问题,确保不管俱乐部名称开头是大写还是小写元音都能匹配到:<xsl:value-of select=" if (starts-with(translate($ClubName, 'AEIOU', 'aeiou'), 'a') or starts-with(translate($ClubName, 'AEIOU', 'aeiou'), 'e') or starts-with(translate($ClubName, 'AEIOU', 'aeiou'), 'i') or starts-with(translate($ClubName, 'AEIOU', 'aeiou'), 'o') or starts-with(translate($ClubName, 'AEIOU', 'aeiou'), 'u')) then concat('l''', $ClubName) else $ClubName "/>这里的
translate把所有大写元音转成小写,避免因为大小写导致匹配失败;concat里的l''是XSLT中转义单引号的写法,最终输出的是l'。方法二:XSLT 2.0+的正则表达式法
如果你用的是XSLT 2.0及以上版本,正则表达式会更简洁,一行就能搞定:<xsl:value-of select="replace($ClubName, '^([aeiouAEIOU].*)', 'l''$1')"/>正则
^([aeiouAEIOU].*)会匹配以元音开头的整个字符串,然后用l'$1替换($1代表捕获到的原字符串内容)。如果变量不是以元音开头,replace会直接返回原内容,完全不用额外的条件判断。
如果你的场景需要处理带重音的元音(比如à、é、ì这类),只需要把这些字符加到判断条件或者正则里就行,比如把正则改成^([aeiouAEIOUàéìòù].*)。
备注:内容来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

