我一直在寻找,但找不到与字符的“规范化空间”等效的 XSL 函数。也就是说,我的内容具有带重音的 UNICODE 字符,这很好,但是根据该内容,我正在创建一个文件名,我不想要这些重音。
那么,有没有什么我忽略了,或者没有正确谷歌搜索来轻松处理字符的?
在 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éwithè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
。
关于xml - 如何去除 XSL 中字符的重音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398127/