Как исправить специальный символ в XSLT - PullRequest
1 голос
/ 11 июля 2019

Я имею дело с XML ниже, где мне нужно удалить специальный символ в имени. Он (Андрес) не уверен, как этот персонаж на самом деле называется. Если я обработаю имя, как оно не работает в системе 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, Андрес, Уильямс

1 Ответ

4 голосов
/ 11 июля 2019

Вы можете удалить большинство диакритических знаков, используя normalize-unicode(), чтобы преобразовать строку в разложенную нормальную форму (NFD), а затем, используя replace(), удалить все символы "без пробелов" (категория *). 1005 *).

То есть replace(normalize-unicode(xxx, 'NFD'), '\p{Mn}', '')

Не проверено.

Но было бы лучше модернизировать принимающее приложение, чтобы оно могло обрабатывать международные имена ...

...