É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?

ufukgun
la source

Réponses:

174

Essaye ça:

&quot;
Andrew Hare
la source
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;
Alex Muriithi
la source
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.

Jon Skeet
la source
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.

kjhughes
la source
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.

Matt Howells
la source
2

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

Neven
la source
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

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