如何在XSLT中修复特殊字符

时间:2019-07-11 12:21:09

标签: xslt special-characters

我正在处理下面的XML,需要删除名字中的特殊字符。 é(Andrés)中的é不确定该字符实际上是什么。如果我按原样处理名字,那么在Vendor系统中会失败

<?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

1 个答案:

答案 0 :(得分:4)

您可以使用normalize-unicode()将字符串转换为可分解的标准格式(NFD),然后使用replace()删除所有“非空格标记”字符(类别{{1 }}。

所以Mn

未经测试。

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