xml - 如何去除 XSL 中字符的重音符号?

标签 xml xslt unicode character-encoding

我一直在寻找,但找不到与字符的“规范化空间”等效的 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/

相关文章:

java - 如何在 Java 中匹配 unicode 字符

python - 将 Unicode 写入 .docx 文件

java - JAXB - xsd :all 内具有无限 maxOccurs 的元素

java - 使用 XPath 获取组中的节点值

java - 使用 Java 程序通过 XSLT 转换多个 XML/XHTML/HTML 文件

C#将xml属性转换为元素

xml - 使用 XSL 复制 XML 并省略元素/属性的值

c++ - 如何使用 unicode 文件名打开 std::fstream(ofstream 或 ifstream)?

java - 在我的组件树窗口中找不到设备屏幕选项

java - Mule JAXB 对象到 XML 转换器抛出 JAXBException