如何从XSL中的字符中去除重音符号?
我一直在寻找,但找不到相当于“normalize-space”的字符的XSL函数。也就是说,我的内容具有重音UNICODE字符,这很好,但是从内容来看,我创建了一个文件名,我不想要那些重音。如何从XSL中的字符中去除重音符号?
那么,有没有什么我可以忽略,或不正确地使用谷歌搜索,轻松处理字符?
在XML数据:
<filename>gri_gonéwiththèw00mitc</filename>
在XSLT样式表:
<xsl:variable name="file">
<xsl:value-of select="filename"/>
</xsl:variable>
<xsl:value-of select="$file"/>
结果 “gri_gonéwiththèw00mitc”
其中
<xsl:value-of select='replace(normalize-unicode("$file", "NFKD"), "[^\\p{ASCII}]", "")'/>
结果一无所获。
什么我的目标是gri_gonewiththew00mitc
我使用的语法错误(没有口音)?
在XSLT/XPath 1.0中,如果您想用不含重音的对应部分替换那些重音字符,则可以使用translate()
函数。
但是,假设你的“重音UNICODE字符”不是由unicode字符组成的。如果是这种情况,您需要使用XPath 2.0 normalize-unicode()
函数。
而且,如果真正的目标是有一个有效的URI,你应该使用encode-for-uri()
更新:例子
translate('gri_gonéwiththèw00mitc','áàâäéèêëíìîïóòôöúùûü','aaaaeeeeiiiioooouuuu')
结果:gri_gonewiththew00mitc
encode-for-uri('gri_gonéwiththèw00mitc')
结果:gri_gon%C3%A9withth%C3%A8w00mitc
正确表达提供建议由@biziclop:
replace(normalize-unicode('gri_gonéwiththèw00mitc','NFKD'),'\P{ASCII}','')
结果:gri_gonewiththew00mitc
注意:在XPath 2.0,正确的字符类的否定是大写的\P
。
所以,违背了我的意见,你可以试试这个:
replace(normalize-unicode("öt hűtőházból kértünk színhúst", "NFKD"), "[^\\p{ASCII}]", "")
虽然被警告,不能被分解,没有基本的ASCII任何字符(挪威ø
或冰岛Þ
为例)将完全从字符串中删除,但这可能与您的要求相符。
很好的例子。请检查我的更新是否有正确的RegExp字符类否定语法。 – 2011-03-24 02:59:01
先前建议的方式包含未知的名为'ASCII'的字符类。根据我的经验,XPath 2.0可以识别类BasicLatin,它的用途与'ASCII'相同。
replace(normalize-unicode('Lliç d'Am Oükl Úkřeč', 'NFKD'), '\P{IsBasicLatin}', '')
删除重音只适用于一小部分的Unicode字符。据我所知,没有标准的拉丁化字符转录方式。 (也就是说,每种语言都有一个不同的)。 – biziclop 2011-03-22 21:50:44
请检查我的答案是否有正确的RegExp语法。 – 2011-03-24 02:59:47