web-dev-qa-db-fra.com

Comment inclure &, <,> etc. dans les valeurs d'attribut XML

Je veux créer un fichier XML qui sera utilisé pour stocker la structure d'un programme Java. Je suis capable d'analyser avec succès le programme Java et de créer le comme requis. Le problème se pose lorsque j'essaie d'inclure le code source dans mes balises, car Java peut utiliser un grand nombre de références d'entité et de caractères réservés comme &, <, >, &. Je ne parviens pas à créer un XML valide.

Mon XML devrait aller comme ceci:

<?xml version="1.0"?>
<prg name="prg_name">
  <class name= "class_name>
    <parent>parent class</parent>
      <interface>Interface name</interface>
.
.
.
      <method name= "method_name">
        <statement>the ordinary Java statement</statement>
        <if condition="Conditional Expression">
          <statement> true statements </statement>
        </if>
        <else>
          <statement> false statements </statement>
        </else>
        <statement> usual control statements </statement>
 .
 .
 .
      </method>
    </class>
 .
 .
 .
 </prg>

Comme ça, mais le problème est que les expressions conditionnelles de if ou d'autres instructions ont beaucoup de & ou d'autres symboles réservés qui empêchent la validation de XML. Étant donné que toutes ces données (code source) sont fournies par l'utilisateur, j'ai peu de contrôle sur elles. Échapper aux personnages sera très coûteux en temps.

Je peux utiliser CDATA pour échapper au texte de l'élément mais il ne peut pas être utilisé pour les valeurs d'attribut contenant des expressions conditionnelles. J'utilise Antlr Java grammaire pour analyser le programme Java et obtenir les attributs et le contenu des balises. Y a-t-il donc des autre solution pour cela?

38
Sudh

Vous devrez vous échapper

" to  &quot;
' to  &apos;
< to  &lt;
> to  &gt;
& to  &amp;

pour xml.

69
Bala R

Dans les attributs XML, vous devez échapper

" with &quot;
< with &lt;
& with &amp;

si vous enveloppez les valeurs d'attribut entre guillemets ("), par exemple.

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/>

signifiant la balise MyTag avec l'attribut attr avec le texte If a<b & b<c then a<c, it's obvious - note: pas besoin d'utiliser &apos; pour échapper à ' personnage.

Si vous enveloppez les valeurs d'attribut entre guillemets simples (') alors vous devez échapper ces caractères:

' with &apos;
< with &lt;
& with &amp;

et vous pouvez écrire " comme si. Échapper à > avec &gt; dans le texte d'attribut n'est pas requis, par exemple <a b=">"/> est du XML bien formé.

21
izogfif