Échapper le caractère guillemet double dans XML


101

Y a-t-il un caractère d'échappement pour un guillemet double en XML? Je veux écrire une balise comme:

<parameter name="Quote = " ">

mais si je mets ", cela signifie que la chaîne est terminée. J'ai besoin de quelque chose comme ça (c ++):

printf("Quote = \" ");

Y a-t-il un caractère à écrire avant les guillemets doubles pour y échapper?





Réponse courte: &quot; Reste de l'histoire ...
kjhughes

Réponses:



120

Voici les caractères courants qui doivent être échappés dans XML, en commençant par des guillemets doubles:

  1. les guillemets ( ") sont échappés à&quot;
  2. esperluette ( &) est échappée à&amp;
  3. les guillemets simples ( ') sont échappés à&apos;
  4. moins de ( <) est échappé à&lt;
  5. supérieur à ( >) est échappé à&gt;

3
Incorrect; & apos; n'est pas un caractère XML valide. C'est un caractère HTML valide - qui est SGML et un SUPERset de XML.
Stefan Steiger

Bien que ce soit un point valable, la plupart des analyseurs XML modernes avec lesquels j'ai travaillé l'acceptent comme caractère valide.
Dariusz G.Jagielski

& quot; n'est pas correctement interprétée par Android lorsque la chaîne est entourée de guillemets doubles. Dans ce cas, E-max answer est le seul à fonctionner.
Softlion

@StefanSteiger c'est sur cette liste
OrangeDog

@Dariusz G. Jagielski: Bien que je n'ai rien contre les analyseurs XML modernes - si vous travaillez avec XML dans une base de données (par exemple ms / pg), vous verrez que tous les logiciels n'utilisent pas les analyseurs XML modernes. Surtout quand il s'agit d'un logiciel complexe vieux de plusieurs décennies. Cela dit, si tout le monde utilisait un analyseur xml moderne, ce serait une bonne chose. Cependant, si ce code est profondément intégré dans des logiciels complexes plus anciens, il devient très difficile de le remplacer (tout en conservant une compatibilité descendante à 100%). Les inconvénients de C ou de ne pas utiliser l'injection de dépendances, pour ainsi dire.
Stefan Steiger

27

D'autres ont répondu en termes de comment gérer l'évasion spécifique dans ce cas.

Une réponse plus large n'est pas d'essayer de le faire vous-même. Utilisez une API XML - il y en a beaucoup pour à peu près toutes les plates-formes de programmation modernes existantes.

Les API XML gèrent automatiquement des choses comme celle-ci pour vous, ce qui rend beaucoup plus difficile de se tromper. À moins que vous n'écriviez vous-même une API XML, vous devriez rarement avoir à vous soucier de ces détails.


11
Je ne peux pas dire que je suis d'accord. Il semble insensé de penser que nous devrions être tellement dépendants des API pour nous abstraire au point que nous n'avons même pas besoin de comprendre comment lire et écrire du XML. L'API XML ne vous aidera probablement pas beaucoup lorsque vous lui fournissez un document mal formé et qu'il explose. Quelqu'un va devoir réparer les données pour les charger.
Christopher Painter

@ChristopherPainter Compte tenu de la taille du standard XML, je doute qu'il y ait beaucoup de gens qui le comprennent réellement. Maintenant, il y en a beaucoup qui pensent que oui, mais ce n'est vraiment pas le cas.
Réintégrer Monica

2
Eh bien, vous devez commencer quelque part. Bien sûr, dans notre industrie, nous nous plaignons simplement que XML est nul et recommençons avec quelque chose d'autre comme JSON. Ensuite, le processus se répète.
Christopher Painter

15

Nouvelle réponse améliorée à une ancienne question fréquemment posée ...

Quand échapper les guillemets doubles dans XML

Les guillemets doubles ( ") peuvent apparaître sans échapper :

  • Dans le contenu textuel XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • Dans les attributs XML délimités par des guillemets simples ( '):

    <NoEscapeNeeded name='Pete "Maverick" Mitchell'/>

    Remarque: le passage aux guillemets simples ( ') ne nécessite également aucun échappement:

    <NoEscapeNeeded name="Pete 'Maverick' Mitchell"/>

Les guillemets doubles ( ") doivent être échappés :

  • Dans les attributs XML délimités par des guillemets doubles:

    <EscapeNeeded name="Pete &quot;Maverick&quot; Mitchell"/>

Conclusion

Les guillemets doubles ( ") doivent être échappés comme &quot;en XML uniquement dans des contextes très limités.


7

Non, il n'y a pas de caractère d'échappement en tant que tel, à la place vous pouvez utiliser &quot;ou même <![CDATA["]]>représenter le "personnage.



2

En C ++, vous pouvez utiliser l'API EscapeXML ATL. C'est la manière correcte de gérer les caractères spéciaux ...


1

Vous pouvez essayer d'utiliser une barre oblique inverse suivie d'un "u", puis de la valeur unicode du caractère, par exemple la valeur unicode du guillemet double est

"-> U + 0022

Par conséquent, si vous le définissiez dans le cadre d'un texte XML sous Android, cela ressemblerait à quelque chose comme ça,

<TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:text=" \u0022 Showing double quotes \u0022 "/>

Cela produirait un texte dans le TextView à peu près quelque chose comme ça

"Affichage des guillemets doubles"

Vous pouvez trouver unicode de la plupart des symboles et caractères ici www.unicode-table.com/en


Vous pouvez trouver unicode de la plupart des symboles et caractères ici unicode-table.com/en
E-max
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.