如何修复 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}', '')
未测试。
但最好使接收应用程序现代化,以便它可以处理国际名称...
我正在处理以下 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}', '')
未测试。
但最好使接收应用程序现代化,以便它可以处理国际名称...