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 :

[org.w3c.dom] CDATASection et CRLF


Sujet :

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

  1. #1
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut [org.w3c.dom] CDATASection et CRLF
    J'ai un problème lors de l'écriture et du coup lors de la lecture d'une balise contenant une valeur dans un org.w3c.dom.CDATASection.

    Je dois enregistrer un texte complet dans une balise. Donc la valeur du texte contient des CRLF (séparateur de ligne windows) et peut contenir n'importe quel caractère. Donc je suis obligé d'enregistrer mon texte dans une section CDATA.

    Lors de l'écriture (enfin je ne connais pas la sauce interne du parser c'est peut être lors du parsing en lui même...), le parser ajoute un CR avant chaque CRLF.
    Outre le fait que cela rende un peu plus illisible la lecture directe du fichier XML, cela pause un problème car je dois parser une nouvelle fois la valeur de la balise après le passage du parser XML pour supprimer le CR en trop et retrouver une valeur propre.

    Quelqu'un a-t-il déjà expérimenté un tel comportement ? A-t-il trouvé un réponse plus adaptée que la mienne ?

    Je suis allé voir sur le forum de Sun (section XML), il n'y a qu'un seul topic traitant du sujet et il date de 2001 (oO). Apparemment d'autres parsers ont le même comportement.

    Voilà.

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Pour être plus précis, c'est le Transformer qui rajoute un CR devant chaque CRLF rencontré dans les CDATASection.

    Pourquoi ? Dieu seul le sait ...

  3. #3
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Bon alors personne n'a jamais enregistré une image en Base64 dans une section CDATA d'un XML sur ce forum ?

    C'est dingue quand même

    Où sont tous les pros de dev.com section Java ? Baptiste Witch ? adiGuba ? dinobogan ? GrandFather ? etc ... les pointures quoi...

    C'est terrible ce problème parce que ça devrait être d'une simplicité biblique : le parser ne doit pas toucher aux données situées entre <![CDATA[ et ]]>.

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Bon alors après quelques recherches, les sections CDATA ne sont pas faites pour que le parser ignore leurs contenus, mais pour qu'ils ignorent les caractères qui seraient considérés comme début ou fin de bloc (markup). Source ici.

    D'après la norme XML, les fins de lignes sont interprétées comme ceci : les caractères CRLF sont remplacés par LF.

    Donc le comportement de l'API XML de java est presque normal.

    D'autres liens intéressants à ce sujet :

    http://marc.info/?l=xerces-j-dev&m=86952145011208&w=2

    http://osdir.com/ml/text.xml.exist/2.../msg00123.html

    Voilà. En d'autres termes, pour enregistrer des données en base64 il faut utiliser des balises standard sans le CDATA.

Discussions similaires

  1. Passage de org.w3c.dom.document à XML
    Par Ikare dans le forum Flex
    Réponses: 2
    Dernier message: 03/06/2008, 18h07
  2. [DOM] org.w3c.dom.Document toujours vide
    Par LGnord dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 05/12/2007, 13h45
  3. Créer un org.w3c.dom.Document depuis une String
    Par BouB dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 22/06/2007, 16h02
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 17h22
  5. [DOM] Récupérer contenu d'un objet de type org.w3c.dom.Document dans une chaine de caractèr
    Par danyboy85 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 18/01/2007, 10h38

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