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 :

Fragment XML et caractères spéciaux [DOM]


Sujet :

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

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut Fragment XML et caractères spéciaux
    Bonjour

    J'ai un doute en ce qui concerne l'ajout d'un morceau d'XML dans un objet Document (org.w3c.dom.Document) existant.

    Mon morceau XML à ajouter est une string que je construit dinamiquement à partir de paramètre insérés par l'utilisateur. Exemple:

    <variable name="a" type="libre">voici ma valeur</variable>

    Le code que j'utilise pour ajouter mon fragment XML au document principal est le suivant:

    final DocumentFragment frag = doc.createDocumentFragment();
    frag.setTextContent(mastringxml);
    parent.appendChild(frag);
    Jusque là tout va bien. Mon fragment est bien ajouté à mon document et à la position souhaitée. Mon problème est que quand je fais le print le document sur mon écran mon fragment XML apparait avec "&lt;" au lieu de "<" et "&gt;" au lieu de ">". Le problème ne se passe pas avec l'XML restant dans le document principal.

    Savez vous ce qu'il me manque de façon à que les charactères spéciaux soient correctement traités?

    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca ne marche pas comme ça. la méthode setTextContent sert à donner les texte qui se trouve entre <....> et </.....>, ce texte est du contenu, pas du xml. Dans votre cas, il va falloir parser votre fragment pour en obtenir un document XML, et ensutie détacher son noeud racine pour l'ajouter au document final. Bref vous devez travailelr avec des Node, pas du String brut

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Mais le fait que je créé un Document à partir du Fragment et à partir de ce Document j'obtiens un Node, ne va pas générer une erreur du type:

    WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it ?


    Je demande car je me suis tourné vers la solution des fragments en ayant cette erreur lorsque je créait un Node et que je faisait un appendChild au Document....

    merci

    Citation Envoyé par tchize_ Voir le message
    ca ne marche pas comme ça. la méthode setTextContent sert à donner les texte qui se trouve entre <....> et </.....>, ce texte est du contenu, pas du xml. Dans votre cas, il va falloir parser votre fragment pour en obtenir un document XML, et ensutie détacher son noeud racine pour l'ajouter au document final. Bref vous devez travailelr avec des Node, pas du String brut

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le documentFragment ne sert qu'à créer des node en deohrs de tout document ou de les stocker temporairement en vue de leur réintégration dans le Document. Pour importer un Node d'un document dans un autre, il faut utiliser Document.importNode():


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Document destDoc = .....;
    Node destination  = ....; // appartiens à destDoc
    Node aAjouter = ..... ; // obtenu par parsing
    Node temp = destDoc.importNode(aAjouter,true); 
    destination.appendChild(temp);
    Pour économiser la mémoire, et si la factory le gère, on peut aussi utiliser adoptNode à la place.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Merci beaucoup pour ton aide, j'ai réussi à faire ce que je voulais...

    Du code pour les prochains qui en auraient besoins:


    => mainDoc est bon object Document
    => DocumentUtil.stringToDocument est une méthode qui effectue la conservion d'une string XML en un object Document
    => stbres est un StringBuilder qui contient tout l'XML que je veux ajouter à mon objet Document
    => nd c'est le Node XML qui représente l'XML que je veux ajouter à mon Document
    => parent est le noeud principal de mon object XML/Document sous lequel je veux ajouter l'XML


    final Document docTemp = DocumentUtil.stringToDocument(stbres.toString());
    Node nd = mainDoc.importNode(docTemp.getFirstChild(), true);
    parent.appendChild(nd);
    Citation Envoyé par tchize_ Voir le message
    Le documentFragment ne sert qu'à créer des node en deohrs de tout document ou de les stocker temporairement en vue de leur réintégration dans le Document. Pour importer un Node d'un document dans un autre, il faut utiliser Document.importNode():


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Document destDoc = .....;
    Node destination  = ....; // appartiens à destDoc
    Node aAjouter = ..... ; // obtenu par parsing
    Node temp = destDoc.importNode(aAjouter,true); 
    destination.appendChild(temp);
    Pour économiser la mémoire, et si la factory le gère, on peut aussi utiliser adoptNode à la place.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/08/2009, 14h18
  2. Désérialisation XML et caractères spéciaux
    Par Ldoppea dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 21/07/2009, 17h39
  3. [XML] Problème caractère spéciaux !
    Par blanchonvincent dans le forum Flash
    Réponses: 0
    Dernier message: 14/03/2008, 14h06
  4. [DOM] Erreur parser fichier xml avec caractère spéciaux
    Par turcotm dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2006, 09h01
  5. [FLASH MX2004] petit soucis XML et caractères spéciaux
    Par Isses dans le forum Intégration
    Réponses: 20
    Dernier message: 25/04/2006, 13h24

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