我正在处理下面的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
答案 0 :(得分:4)
您可以使用normalize-unicode()
将字符串转换为可分解的标准格式(NFD),然后使用replace()
删除所有“非空格标记”字符(类别{{1 }}。
所以Mn
未经测试。
但是最好使接收应用程序现代化,以便它可以处理国际名称...