Comment insérer
Dans une feuille de style XSLT, je reçois toujours cette erreur:
Erreur d'analyse XML: entité non définie
Essentiellement, je veux un caractère d'espace insécable dans le modèle XSLT.
Comment insérer
Dans une feuille de style XSLT, je reçois toujours cette erreur:
Erreur d'analyse XML: entité non définie
Essentiellement, je veux un caractère d'espace insécable dans le modèle XSLT.
Réponses:
Utilisez  
plutôt le code d'entité .
est une "référence d'entité de caractère" HTML. Il n'y a pas d'entité nommée pour l'espace insécable en XML, vous utilisez donc le code  
.
Wikipedia inclut une liste d'entités XML et HTML , et vous pouvez voir qu'il n'y a que 5 "entités prédéfinies" en XML, mais HTML en a plus de 200. Je vais également pointer vers Créer un espace (& nbsp;) en XSL qui a d'excellentes réponses.
Š
au lieu de  
celle-ci, qui se résoudra toujours en un espace insécable Unicode.
 
fonctionne vraiment bien. Cependant, il affichera l'un de ces caractères étranges dans le codage ANSI. <xsl:text>
a fonctionné le mieux pour moi.
<xsl:text> </xsl:text>
On peut aussi faire cela:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, ce qui n'est pas nécessaire et il a été déconseillé dans XSLT 2.0 et plus encore dans 3.0. Dans ces versions, vous pouvez atteindre le même effet avec un fonctionnement xsl:character-map
garanti entre les processeurs. En outre, cela place une entité nommée
dans la sortie, qui n'est pas nécessairement la même chose qu'un espace insécable et l'extrémité de réception doit avoir cette entité déclarée (en HTML, c'est généralement implicitement).
Utilisez ceci
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
edit: les downvoters devraient probablement valider que cela fonctionne en premier (c'est le cas, et c'est la solution la plus générale au problème.)
Vous voudrez peut-être ajouter la définition de cette entité au début du fichier (sous la déclaration xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Vous pouvez également ajouter plus d'entités telles que Ntilde, Aacute, etc.
En plus de la réponse de victor hugo, il est possible d'obtenir toutes les références de caractères connues dans un fichier XSLT, comme ceci:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text>& –</xsl:text>
Il existe également une certaine différence dans le résultat de cette approche par rapport à <xsl:text disable-output-escaping="yes">
une. Ce dernier va produire des littéraux de chaîne comme
pour tous les types de sortie, même pour <xsl:output method="text">
, et cela peut être différent de ce que vous pourriez souhaiter ... Au contraire, obtenir des entités définies pour le modèle XSLT via <!DOCTYPE ... <!ENTITY ...
produira toujours une sortie cohérente avec vos xsl:output
paramètres.
Et lorsque vous incluez toutes les références de caractères, il peut être judicieux d'utiliser un résolveur d'entité local pour empêcher le moteur XSLT de récupérer les définitions d'entité de caractère sur Internet. Les utilisateurs JAXP ou Xalan-J explicites peuvent avoir besoin d'un correctif pour que Xalan-J utilise correctement le résolveur. Voir mon blog XSLT, entités, Java, Xalan ... pour télécharger le patch et commenter.
Lorsque vous utilisez ce qui suit (sans disable-output-escaping
!), Vous obtiendrez un seul espace insécable:
<xsl:text> </xsl:text>
disable-output-escaping
pour ce
Les feuilles de style XSLT doivent être du XML bien formé. Étant donné qu'il " "
ne fait pas partie des cinq entités XML prédéfinies , il ne peut pas être directement inclus dans la feuille de style. Donc, revenir à votre solution " "
est un remplacement parfait que " "
vous devriez utiliser.
Exemple:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
vous pouvez aussi utiliser:
<xsl:value-of select="'&nbsp'"/>
rappelez-vous l'ampli après le & ou vous obtiendrez un message d'erreur
&nbsp;
(en supposant que vous vouliez que le point-virgule soit là), qui sera rendu sous la forme
, et non sous la forme `` (nb-space).
J'essayais d'afficher des bordures sur une cellule vide dans un tableau HTML. Mon ancienne astuce consistant à utiliser un espace insécable dans les cellules vides ne fonctionnait pas à partir de xslt. J'ai utilisé le saut de ligne avec le même effet. Je mentionne cela juste au cas où la raison pour laquelle vous essayez d'utiliser l'espace insécable était de donner du contenu à une cellule de tableau «vide» afin d'activer les bordures de cellule.
<br/>
Essayez d'utiliser
<xsl:text> </xsl:text>
Mais cela dépend du processeur XSLT que vous utilisez: la spécification XSLT ne nécessite pas de processeurs XSLT pour le convertir en "
".
Bien que la réponse ait déjà été fournie par @brabster et d'autres.
Je pense qu'une solution plus réutilisable serait:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>