web-dev-qa-db-fra.com

Comment insérer & nbsp; en XSLT

Comment puis-je insérer

 

Dans une feuille de style XSLT, je continue à avoir cette erreur:

Erreur d'analyse XML: entité non définie

En gros, je veux un espace insécable dans le modèle XSLT.

192
JL.

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 dans 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" dans XML, mais HTML en a plus de 200. Je ferai aussi référence à Création d'un espace ;) en XSL qui a d’excellentes réponses.

317
brabster

&#160; fonctionne vraiment bien. Cependant, il affichera l'un de ces caractères étranges en codage ANSI. <xsl:text> a fonctionné mieux pour moi.

<xsl:text> </xsl:text>
30
Saroj

On peut aussi faire ça: 

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
24
WaterSoul

Utilisez ceci

<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;

edit: Les votants descendants devraient probablement valider que cela fonctionne en premier (c'est la solution la plus générale au problème.)

20
jagprinderdeep

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  "&#160;" >
]>

Vous pouvez aussi ajouter d'autres entités telles que Ntilde, Aacute, etc.

12
victor hugo

En plus de la réponse de victor hugo , il est possible d'obtenir toutes les références de caractère 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>&amp; &nbsp; &ndash;</xsl:text>

Il y a aussi une certaine différence dans le résultat de cette approche par rapport à <xsl:text disable-output-escaping="yes"> un. Ce dernier va produire des littéraux de chaîne tels que &nbsp; pour tout type de sortie, même pour <xsl:output method="text">, et cela peut s'avérer 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 sortie compatible avec vos paramètres xsl:output.

Et lorsque vous incluez toutes les références de caractère, il peut être judicieux d'utiliser un résolveur d'entité locale pour empêcher le moteur XSLT d'extraire les définitions d'entité de caractère sur Internet. Les utilisateurs JAXP ou Xalan-J explicites peuvent avoir besoin d’un patch pour que Xalan-J utilise correctement le résolveur. Voir mon blog XSLT, entités, Java, Xalan ... pour le téléchargement des correctifs et des commentaires.

5
Sergey Ushakov

XSLT stylesheets doivent être au format XML bien formé. Puisque "&nbsp;" ne fait pas partie des les cinq entités XML prédéfinies , il ne peut pas être directement inclus dans la feuille de style . Revenir à votre solution "&#160;" est donc un remplacement parfait de "&nbsp;" à utiliser.

Exemple: 

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
2
Adil

Lorsque vous utilisez ce qui suit (sans disable-output-escaping!), Vous obtenez un seul espace insécable:

<xsl:text>&#160;</xsl:text>

2
Shaam

vous pouvez aussi utiliser:

<xsl:value-of select="'&amp;nbsp'"/>

rappelez-vous l'ampli après le & ou vous obtiendrez un message d'erreur

0
Mattia Vio

J'essayais d'afficher des bordures sur une cellule vide dans un tableau HTML. Mon vieux truc, qui consistait à utiliser un espace insécable dans des cellules vides, ne fonctionnait pas avec xslt. J'ai utilisé le saut de ligne avec le même effet. Je le mentionne juste au cas où la raison pour laquelle vous vouliez utiliser cet espace était de donner du contenu à une cellule de tableau 'vide' afin d'activer les bordures de cellule.

<br/>
0
B H

Essayez d'utiliser 

<xsl:text>&#160;</xsl:text>

Mais cela dépend du processeur XSLT que vous utilisez: la spécification XSLT ne nécessite pas que les processeurs XSLT le convertissent en "&nbsp;". 

0
Viacheslav