IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Comment faire pour que SAX écrive ">" au lieu de ">" ?


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Par défaut Comment faire pour que SAX écrive ">" au lieu de ">" ?
    Bonjour à tous,

    j'utilise java et sax pour former un fichier xml, un des attributs d'une de mes balises doit contenir le caractère ">" et je n'arrive pas à obtenir ce résultat. Sax me met automatiquement ">" à la place de ">", comment faire svp ?
    Quelqu'un aurait-il une idée ?

    Merci d'avance.
    valérie

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En première remarque, rappelons que > et > sont équivalents en XML. C'est juste cosmétique. Si le fichier n'est pas lu à l'œil nu mais utilisé par des programmes, ça ne fait pas de différence.
    Mais c'est vrai qu'à l'œil nu, c'est moche, et j'ai déjà eu le problème.

    Je ne sais pas trop comment régler ça avec SAX, la spécification générale ne prévoit pas d'option pour ça, et je ne connais pas d'option spécifique.

    Avec jdom ça peut se faire sans trop de soucis. Ce n'est pas prévu pour, mais jdom rend ses propres objets assez simplement customizables.

    Voici un exemple de programme qui modifie le serializer XML de jdom pour qu'il n'échappe pas les > :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public static void main(String[] args) {
     try {
      // construit le document avec un seul élément <test att="a > b and c < d" />
      Document doc = new Document();
      JDOMFactory factory = new DefaultJDOMFactory();
     
      Element root = factory.element("test");
      root.setAttribute("att", "a > b and c < d");
      doc.setRootElement(root);
     
      // construit un serializer qui n'échappe pas les >
      // XMLOutputter est le serializer fourni avec jdom, son constructeur par défaut utilise un format par défaut
      XMLOutputter outputter = new XMLOutputter() {
        // modifions juste la méthode de XMLOutputter qui échappe le contenu des attributs
        public String escapeAttributeEntities(String str) {
          String conv = super.escapeAttributeEntities(str);
          return conv.replaceAll("&gt;", ">");
        }
      };
     
      // testons
      outputter.output(doc, System.out);
     } catch (IOException e) {
       e.printStackTrace();
     }
    }
    L'exemple montre que les < sont quand même échappés, sans quoi le XML serait mal formé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    les < sont échappés, sans quoi le XML serait mal formé.
    Voilà la réponse à la question. Il est impossible de mettre certains caractères seuls dans les données d'un fichier xml, car ceux-ci ont un sens :
    qui sont remplacés par les entités
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    &lt; &gt; &apos; & quot; &amp;

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En fait, non. En général on ne le dit pas pour simplifier les explications, mais > est parfaitement autorisé dans le texte et dans les attributs. Ce sont < et & qui ne le sont pas. et ' et " ne posent problème que dans les attributs où ce sont les délimiteurs.

    Bref, mettre > dans du XML est parfaitement valide, juste rarement fait (et assez risqué vu que pas mal d'outils ne sont pas au courant). Dans la mesure où c'est valide, parfois on veut pouvoir mettre > au lieu de &gt; pour raison cosmétique.

    Mon exemple avec cond="a > b" l'illustre assez bien. Et souvent, il reste possible de remplacer "a < b" par "b > a".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 24
    Dernier message: 24/05/2006, 19h19
  2. Réponses: 2
    Dernier message: 22/05/2006, 14h04
  3. [VB6]Comment faire pour que le caption d'une ARProgressBar..
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/04/2006, 20h42
  4. comment faire pour que plusieurs user utilise mem macro?
    Par megapacman dans le forum Access
    Réponses: 4
    Dernier message: 27/03/2006, 16h55
  5. CSS: comment faire pour que mes coins soit arrondi
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 16/02/2006, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo