如何修复 XSLT 中的特殊字符

Ven*_*tsa 1 xslt special-characters

我正在处理下面的 XML,其中我需要删除名字中的特殊字符。(Andr\xc3\xa9s) 中的 \xc3\xa9 不确定这个字符的实际名称是什么。如果我按原样处理名字,那么供应商系统就会失败

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<reportentry>\n<reportdata>\n    <id>12345</id>\n    <firstname>Andr\xc3\xa9s</firstname>\n    <lastname>Williams</lastname>\n</reportdata>\n</reportentry>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我只是尝试了有效的替换功能,下面是代码。不知道有没有更好的方法来处理?有什么建议 ?

\n\n
 <xsl:value-of select="replace($string1, \'\xc3\xa9\', \'e\')"/>\n
Run Code Online (Sandbox Code Playgroud)\n\n

完整代码

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\nxmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">\n\n<xsl:variable name="string1" select="/reportentry/reportdata/firstname"/>\n<xsl:variable name="comma" select="\',\'"/>\n<xsl:output method="text" omit-xml-declaration="yes"/>\n\n<xsl:template match="/reportentry">\n\n    <xsl:value-of select="reportdata/id"/>\n    <xsl:value-of select="$comma"/>\n    <xsl:value-of select="replace($string1, \'\xc3\xa9\', \'e\')"/>\n    <xsl:value-of select="$comma"/>\n    <xsl:value-of select="reportdata/lastname"/>\n\n</xsl:template>\n</xsl:stylesheet>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我预期结果为 12345,Andres,Williams

\n

Mic*_*Kay 5

您可以通过使用normalize-unicode()将字符串转换为分解范式 (NFD),然后使用replace()删除所有“非空格标记”字符(类别Mn)来去除大多数变音符号。

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

未测试。

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