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 :

Ajout d'un noeud [DOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut Ajout d'un noeud
    Bonjour,

    je débute dans l'utilisation de XML avec Java. J'utilise l'API Dom pour construire un document SVG.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Node aNode = builder.getDOMImplementation().createDocument(null, aQualifiedName, doctype);
    La ligne ci-dessus, en tenant compte de la création d'un Builder au préalable, crée l'entête d'un document suivante quand je l'affiche :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
    <svg/>

    Je voudrais créer avec le code suivant une balise <svg></svg> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Document doc = (Document)aNode;
    Element racine = doc.createElement("svg");
    doc.appendChild(racine);
    J'ai l'erreur suivante à l'éxecution :

    "org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. "

    Pourriez-vous m'expliquer et/ou corriger mon erreur ?

    Merci d'avance

    Bonne journée[/b]

  2. #2
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element racine = doc.createElement("svg");
    ça crée déja ta racine dans ton document xml, donc c'est logique que, si tu essaie de remettre une racine, il détecte une erreur de hierarchie ^^

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut
    Merci pour ta réponse.

    Quand tu dis "ça crée déjà ta racine dans ton document xml", c'est la méthode createElement qui créé une racine ou c'est juste parce que j'ai appellé le noeud à créer "svg" ?

  4. #4
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    tu as appelé le premier noeud sur ton document, c'est donc automatiquement sa racine.. LE fait que tu la sauvegarde dans une variable racine te permet justement de lui mettre des fils comme tu le désire

    edit : enfin je crois que ca marche comme ca, moi je faisait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
             *We create the root of the XML that is "matrix".
             */
    	static Element matrix = new Element("matrix");
     
    	/**
             *We create a new JDOM document based on the root just created.
             */
    	static org.jdom.Document document = new Document(matrix);

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut
    Excuse moi je débute et je ne comprends pas tout...

    Quelle instruction dans ce que j'ai écrit, sauvegarde la racine du document dans une variable racine ?

    Et ensuite, pour ajouter des noeuds, faut-il utiliser la méthode createElement et ensuite appendChild pour les lier ?

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Si je ne m'abuse,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element racine = doc.createElement("svg");
    ici tu crée une reference sur un Element nommé "racine" sur lequel tu "pointes" la balise <svg>, donc l'objet Element associé a ta balise "<svg>" (je suis clair ? )

    Pour ajouter un noeud :
    Tu as un noeud de type Element (ici ta racine):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element racine = doc.createElement("svg");
    tu crées un nouveau noeud de type Element :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element test = new Element("test");
    Tu insere le texte entre les balise de ton Element <test> :
    Enfin, tu ajoutes le noeud a ta racine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine.addContent(test);
    ca devrait donner ca :
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
    <svg>
    <test>test</test>
    </svg>
    A priori, si je me souviens bien, c'est comme ca que ca marche, que quelqu'un me corrige si je me trompe

    bien à toi

    mavina

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut
    ici tu crée une reference sur un Element nommé "racine" sur lequel tu "pointes" la balise <svg>, donc l'objet Element associé a ta balise "<svg>" (je suis clair ? )
    Tu es sur que createElement fait juste pointer racine sur la balise svg existante ?

    D'autant plus que j'ai vérifier dans l'api DOM de Java et qu'on ne doit pas pouvoir faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Element test = new Element("test");
    ni ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Node test = new Node("test");
    car Node et Element sont des interfaces.

    Qu'en penses-tu ?

  8. #8
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    quand j'avais eu un projet en java avec du xml j'avais fait comme ca et ca compilait / marchait parfaitement.
    As tu fait le test ?

    d'ailleurs :
    http://www.jdom.org/docs/apidocs/
    vas voire la classe Element

    edit ² : ooops, je parle de JDOM moi pas de DOM :/
    Bon ya eu mésentente la :/ Je m'excuse, j'ai vraiment mal lu
    *se sent tres bete xD* Excuse moi encore
    (Au moins tu as la méthode si tu veux passer en JDOM xD)

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut
    oui, j'ai testé.

    Peut-être utilisais-tu JDom non ?

    De plus j'ai vérifié, la classe org.w3c.dom.Element que j'utilise est bien une interface et n'a pas de constructeur.

  10. #10
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    vi JDOM désolé excuse moi :/

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut
    Y'a pas de mal, je ne retiendrai que l'intention et je t'en remercie

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Par défaut
    J'ai enfin trouvé la solution à mon problème.

    La voici pour ceux que ça intéresserait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Node n = doc.getChildNodes().item(1);
    Node element = doc.createElement("newNode");
    ((Element)element).setAttribute("att1","xxxx");
    n.appendChild(element);
    En fait, je devais d'abord récupérer la balise <svg/> créer initialement dans le document et y ajouter ensuite des fils.

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

Discussions similaires

  1. Scroll qui remonte lors de l'ajout d'un noeud au body
    Par Sergejack dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/08/2006, 18h11
  2. Ajouter ou supprimer noeud dans un JTree
    Par jdewalqu dans le forum Composants
    Réponses: 6
    Dernier message: 11/07/2006, 09h35
  3. [DOM] Problème d'ajout d'un noeud
    Par damanium dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/05/2006, 19h01
  4. [C#][Débutant] Comment ajouter un sous noeud a un treeview
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/05/2006, 18h11
  5. [SimpleXML] Problème sur simpleXML pour ajouter de nouveaux noeuds
    Par Shandler dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/02/2006, 13h55

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