如何修复 XSLT 中的特殊字符

How to fix a special character in XSLT

我正在处理以下 XML,我需要删除名字中的特殊字符。 é in (Andrés) 不确定这个角色实际上叫什么。如果我按原样处理名字,它在供应商系统中会失败

<?xml version="1.0" encoding="UTF-8"?>
<reportentry>
<reportdata>
    <id>12345</id>
    <firstname>Andrés</firstname>
    <lastname>Williams</lastname>
</reportdata>
</reportentry>

我只是尝试了可以​​正常工作的替换功能,下面是代码。不确定是否有更好的方法来处理它?有什么建议吗?

 <xsl:value-of select="replace($string1, 'é', 'e')"/>

完整代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">

<xsl:variable name="string1" select="/reportentry/reportdata/firstname"/>
<xsl:variable name="comma" select="','"/>
<xsl:output method="text" omit-xml-declaration="yes"/>

<xsl:template match="/reportentry">

    <xsl:value-of select="reportdata/id"/>
    <xsl:value-of select="$comma"/>
    <xsl:value-of select="replace($string1, 'é', 'e')"/>
    <xsl:value-of select="$comma"/>
    <xsl:value-of select="reportdata/lastname"/>

</xsl:template>
</xsl:stylesheet>

我预期结果为 12345,Andres,Williams

您可以通过使用 normalize-unicode() 将字符串转换为分解的正常形式 (NFD),然后使用 replace() 删除所有 "non-spacing mark" 个字符(类别 Mn).

所以replace(normalize-unicode(xxx, 'NFD'), '\p{Mn}', '')

未测试。

但最好使接收应用程序现代化,以便它可以处理国际名称...