612 votes

Comment échapper aux esperluettes dans le XML ?

Comment échapper aux esperluettes (&) dans le XML ? J'ai essayé & mais ce n'est pas autorisé.

1 votes

L'affirmation dans la dernière révision de cette question que "Le caractère esperluette (&) ... n'est pas valide en HTML." est fausse. En effet, même la réponse acceptée à la question liée fournie comme justification indique que "HTML5 vous permet de le laisser en clair, mais seulement lorsque les données qui suivent ne ressemblent pas à une référence de caractère valide". .

481voto

Wim ten Brink Points 12422

&amp ; donnera lieu à & lorsqu'il sera rendu. Ce qui donnera & si on le rend à nouveau...

En fait, j'ai eu un petit problème pour fournir cet exemple car ce site rendait le premier amp ; de sorte qu'un seul était visible. Pour résoudre ce problème, j'ai dû utiliser amp ; trois fois après le &. Chaque amp ; ajoute une autre couche de rendu.

6 votes

En quoi cela répond-il à la question ?

220voto

John Feminella Points 116878

Conformément à §2.4 de la spécification XML 1.0 vous devriez être en mesure d'utiliser & .

J'ai essayé & mais ce n'est pas autorisé.

Êtes-vous sûr qu'il ne s'agit pas d'un problème différent ? XML définit explicitement ceci comme la façon d'échapper aux esperluettes.

5 votes

Cette réponse était parfaitement raisonnable lorsqu'elle a été publiée, mais les changements (ou peut-être les clarifications) apportés à la question depuis lors l'ont rendue absurde en tant que réponse. D'une part, le passage cité n'est plus présent dans la question.

172voto

trouble Points 461

Le caractère '&' est lui-même un caractère d'échappement dans le XML. La solution consiste donc à le concaténer avec un équivalent décimal Unicode pour '&', ce qui permet d'éviter toute erreur d'analyse XML. En d'autres termes, il faut remplacer le caractère "&" par " ". & '.

7 votes

Je préfère vraiment cette solution ! Il devrait également être possible d'utiliser la notation hexadécimale : &

2 votes

Logiquement, pourquoi cela fonctionnerait-il ? Les deux chaînes ont une esperluette, y compris celle avec le code de caractère à la fin...

8 votes

@sijpkes Parce que l'esperluette ici indique à l'analyseur syntaxique que les caractères suivants sont utilisés pour représenter un autre caractère, qui dans ce cas serait une esperluette. Une esperluette n'est pas "illégale" en XML, elle a simplement une signification particulière. Elle signifie que "tous les caractères qui suivent jusqu'au point-virgule doivent être convertis en quelque chose d'autre". Lorsque vous avez une esperluette normalement, sans les caractères descriptifs et le point-virgule de fin, l'analyseur syntaxique est confus.

86voto

scragar Points 4324

Les balises CDATA ?

     <![CDATA[
       This is some text with ampersands & other funny characters. >>
     ]]>

5 votes

Il s'agit d'une supposition plutôt que d'une réponse.

10 votes

C'est peut-être une supposition, mais elle est correcte. Les marqueurs CDATA permettent l'utilisation d'esperluettes brutes.

19 votes

Le message original ne précisait pas où le & devait être utilisé, les balises CDATA ne peuvent pas être utilisées pour les valeurs d'attributs, mais uniquement pour le contenu réel des balises, d'où la raison pour laquelle j'ai inclus le ' ?

59voto

nikc.org Points 7275

&amp; devrait fonctionner parfaitement, Wikipedia a un Liste d'entités prédéfinies en XML .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X