Comme @ EiríkrÚtlendi suggéré dans les commentaires; assainir/vérifier votre sortie dans le XSLT.
Vous pouvez créer une fonction avec un seul paramètre qui vérifie un caractère non valide ...
XML Entrée
<elem>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</elem>
XSLT 2,0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:so="StackOverflow Example">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="elem">
<xsl:value-of select="so:out(.)"/>
</xsl:template>
<xsl:function name="so:out">
<xsl:param name="str"/>
<xsl:if test="matches($str,'[^\p{L}]')">
<xsl:message terminate="yes">
<xsl:value-of
select="
concat('Invalid character in "',
$str, '".')"
/>
</xsl:message>
</xsl:if>
<xsl:value-of select="$str"/>
</xsl:function>
</xsl:stylesheet>
Texte Sortie
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Si vous ajoutez un autre caractère à l'élément elem
dans l'entrée, vous obtiendrez le message suivant (j'ai ajouté un espace pour le faire échouer):
Invalid character in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".
Vous pouvez également consulter ce caractère par caractère ...
<xsl:function name="so:out">
<xsl:param name="str"/>
<xsl:for-each select="string-to-codepoints($str)">
<xsl:if test="matches(codepoints-to-string(.),'[^\p{L}]')">
<xsl:message terminate="yes">
<xsl:value-of
select="
concat('Invalid character ("',
codepoints-to-string(.),
'") in "',
$str, '".')"
/>
</xsl:message>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$str"/>
</xsl:function>
qui produirait le message:
Invalid character (" ") in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".
Ce dont vous avez besoin n'est pas entièrement clair. Il semble que ce que vous devez faire est de désinfecter votre sortie, ** dans votre code XSLT **, avant qu'il ne parvienne au fichier de sortie. –
Vous pouvez essayer le [Jeu de caractères Windows-1252] (https://en.wikipedia.org/wiki/Windows-1252). – zx485
Chaque personnage est spécial à sa manière. –