Comment transformer les & nbsp; XSLT
J'ai une transformation xslt suivante:
<span><xsl:text disable-output-escaping="yes"><![CDATA[ Some text]]></xsl:text></span>
Après transformation-je obtenir:
<span>&nbsp;Some text</span>
qui est traduit comme: & nbsp;texte
Je veux rendre & nbsp; en tant que caractère d'espace. J'ai essayé aussi de changer disable-output-escaping pas, mais ça n'a pas aidé.
merci pour l'aide.
- Je ne pense pas que les sections CDATA sont censés aller dans votre XSLT. Je suis sûr qu'ils sont désignés pour le fichier XML.
- Avez-vous essayé de mettre deux && donc <![CDATA[ texte]]> juste une pensée
- j'ai essayé aussi &&, mais n';t de travail
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devriez utiliser
 
, parce que
entité est susceptible de ne pas être défini. Et pas CDATA.Une possibilité est de définir
nbsp
entité pour votre fichier xsl:Les deux autres réponses sont correctes, mais j'ai décidé de prendre un peu plus large vue à ce sujet.
Ce que tout le monde devrait savoir sur les sections CDATA
Section CDATA est juste une solution de rechange à la sérialisation forme une fuite de la chaîne XML. Cela signifie que l'analyseur produit le même résultat pour
<span><![CDATA[ a & b < 2 ]]></span>
et<span> a & b < 2 </span>
. Applications XML de travail sur l'analyse de données, donc une application de XML doit produire le même résultat pour les deux exemple des éléments d'entrée.Brièvement: échappé de données et de l'onu-échappé de données à l'intérieur d'un
CDATA
section signifient exactement la même.Dans ce cas
est identique à
Noter que le
&
personnage a été échappé à&
dans le dernier sérialisation forme.Ce que tout le monde devrait savoir à propos de
disable-output-escaping
disable-output-escaping
est une fonctionnalité qui concerne la sérialisation seulement. Afin de maintenir le bien-formation de la sérialisé XML, XSLT processeurs échapper&
et<
(et éventuellement d'autres caractères) à l'aide d'entités. Leur échappé formes sont&
et<
. Échappé ou non, le XML données est le même. XSLT éléments<xsl:value-of>
et<xsl:text>
peut avoir undisable-output-escaping
attribut, mais il est généralement conseillé d'éviter d'utiliser cette fonctionnalité. Les raisons pour cela sont:disable-output-escaping
attribut. Dans ce cas, le processeur doit s'échapper de la sortie (ou il peut faire une erreur) donc encore une fois, la désactivation de la sortie d'échappement échouera.disable-output-escaping
sur de tels caractères dans l'erreur ou échappés de texte encore une fois, la désactivation de la sortie d'échappement échouera.disable-output-escaping
est souvent mal compris et mal utilisé et le même résultat pourrait être obtenu avec de plus en plus réguliers façons, par exemple, la création de nouveaux éléments comme des littéraux ou avec<xsl:element>
.Dans ce cas
devrait sortie
mais la
&
personnage ai échappé au lieu de cela, donc dans ce cas la sortie d'échappement semble échouer.Ce que tout le monde devrait savoir à propos de l'utilisation des entités
Si un document XML contient une référence d'entité, l'entité doit être déclaré, si non, le document n'est pas valide. XML a seulement 5 pré-définis entités. Ils sont:
&
pour&
<
pour<
>
pour>
"
pour"
'
pour'
Toutes les autres références d'entité doit être définie dans une DTD interne du document ou dans une DTD externe que le document fait référence à (directement ou indirectement). Donc aveuglément l'ajout de références d'entité à un document XML peut entraîner des documents non valides. Documents avec (X)HTML DOCTYPE pouvez utiliser plusieurs entités (comme
) parce que le DTD XHTML fait référence à une DTD qui contient leur définition. Les entités sont définies dans ces trois Dtd: http://www.w3.org/TR/html4/HTMLlat1.ent , http://www.w3.org/TR/html4/HTMLsymbol.ent et http://www.w3.org/TR/html4/HTMLspecial.ent .Une entité de référence n'est pas toujours remplacé par son texte de remplacement. Cela pourrait se produire par exemple si l'analyseur n'a pas de connexion à internet pour récupérer la DTD. Aussi la non-validation des analyseurs n'a pas besoin d'inclure le texte de remplacement. Dans de tels cas, les données représentées par l'entité est "perdu". Si l'entité obtient le remplacement fonctionne, il n'y aura pas de signes dans l'analyse du modèle de données que la sérialisation XML avaient toutes les références d'entité à tous. Le modèle de données sera le même si l'on utilise des entités ou leurs valeurs de remplacement. Brièvement: les entités ne sont qu'une autre manière de représenter le texte de remplacement de l'entité de référence.
Dans ce cas, le texte de remplacement de
est 
(qui est la même que 
à l'aide de la notation hexadécimale). Au lieu de chercher à la sortie de la
entité, il sera plus facile et plus robuste simplement utiliser la solution proposée par @phihag. Si vous aimez la lisibilité de la
entité, vous pouvez suivre la solution proposée par @Michael Krelin et de définir cette entité dans une DTD interne. Après que, vous pouvez l'utiliser directement dans votre code XSLT.Ne remarque que dans les deux cas, le processeur XSLT sera de sortie le littéral espace insécable et pas le
entité de référence ou de la 
référence de caractère. La création de telles références manuellement avec XSLT 1.0 nécessite l'utilisation dedisable-output-escaping
fonctionnalité, qui a ses propres problèmes, comme indiqué ci-dessus.Dans CDATA, toutes les valeurs sont littéral. Vous souhaitez:
de l'entité ou de l'utilisation du numérique 
.