2009-07-09 5 views
1

J'essaie d'utiliser la sortie de texte XSLT pour générer un fichier (dans un format de fichier dont je n'ai pas le contrôle), et même s'il s'agit principalement de texte, il inclut les caractères non imprimables de poids faible en tant que drapeaux, y compris les caractères qui ne sont pas valides dans un fichier XLST (selon la spécification XSLT).Générer des caractères non imprimables de poids faible à partir de XLST

Je voudrais que quelque chose comme ci-dessous pour travailler, mais ce n'est pas un fichier XSLT valide car il contient des caractères qui ne sont pas autorisés dans les fichiers XSLT:

<?xml version="1.0" encoding="US-ASCII" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text" encoding="US-ASCII"/> 
    <xsl:template match="/">&#1;</xsl:template> 
</xsl:stylesheet> 

Je reçois le texte suivant erreur:

[Fatal Error] :4:35: Character reference "&#1" is an invalid XML character. 
ERROR: 'Character reference "&#1" is an invalid XML character.' 
FATAL ERROR: 'Could not compile stylesheet' 

J'ai essayé avec un caractère réel 1 aussi, avec ou sans une section CDATA, xsl: éléments de texte, des cartes de caractère xslt-2, deux codages différents, mais je ne peux pas comment obtenir un caractère ASCII avec un code binaire = 1.

J'ai dû recourir au post-traitement de ma sortie, ce qui n'est pas idéal.

Y a-t-il un moyen de générer une seule sortie de caractère non imprimable de bas niveau à partir de XSLT?

Environnement: Java 6, construit en XSL Transformer.

Répondre

3

Vous pouvez appeler des méthodes statiques de classes Java à partir de XSLT. Utilisez le hack par exemple pour écrire 0x01 à votre flux de sortie:

<?xml version="1.0" encoding="US-ASCII" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:char="java.lang.Character" version="1.0"> 
    <xsl:output method="text" encoding="US-ASCII" /> 
    <xsl:template match="/"> 
     <xsl:value-of select="char:toString(1)"></xsl:value-of> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Merci - cela fonctionne pour mon environnement. N'existe-t-il pas de solution XSLT pure? –

+0

Je pense que l'intension originale de XSLT est de produire une sortie "lisible", pas de données binaires. Les formats de documents binaires sont le domaine de XSL-FO. Pour les "vrais" formats binaires, XSL n'est pas l'outil de choix. – ftl

+0

Ma sortie est principalement du texte lisible. J'adapte les feuilles de style xslt existantes conçues à l'origine pour produire du HTML. Avec un très petit changement, ils travaillent presque exactement comme j'ai besoin. –

0

Une autre option que je suis venu avec, est d'utiliser xsl: param que l'environnement appelant met à caractère 0x01. Cela signifie qu'au lieu de toujours travailler dans un environnement java et d'exiger des modifications ailleurs, la feuille de style requiert une prise en charge environnementale dans tous les environnements, mais peut fonctionner sans modification dans tous ces environnements.

Je ne sais pas encore quel côté de ce compromis est préférable pour ce sur quoi je travaille.

Questions connexes