2017-07-27 1 views
0

Je suis à la recherche du type d'encodage correct doit être utilisé dans XSLT lors du traitement de mon XML.Quel est le codage qui peut être utilisé dans XSLT pour prendre en charge uniquement les caractères de base de l'alphabet latin?

Mon besoin est:

fichier texte de sortie n'accepte pas de caractères spéciaux ou UTF8. La logique de l'alphabet utilisée qui ne supporte que l'alphabet anglais moderne est un alphabet latin composé de 26 lettres - les mêmes lettres que l'on trouve dans l'alphabet latin moderne de base.

J'ai essayé d'utiliser le encoding = "ISO 8859-1", encoding = "ISO 8859-15".

quelqu'un peut me dire l'encodage correct si ci-dessus sont mal

Merci, Jagan

+1

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. –

+0

Vous pouvez essayer le [Jeu de caractères Windows-1252] (https://en.wikipedia.org/wiki/Windows-1252). – zx485

+3

Chaque personnage est spécial à sa manière. –

Répondre

2

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 &quot;', 
      $str, '&quot;.')" 
     /> 
     </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 (&quot;', 
      codepoints-to-string(.), 
      '&quot;) in &quot;', 
      $str, '&quot;.')" 
     /> 
     </xsl:message> 
    </xsl:if> 
    </xsl:for-each> 
    <xsl:value-of select="$str"/> 
</xsl:function> 

qui produirait le message:

Invalid character (" ") in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".