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 :

Ajouter des nouveaux élements depuis un nouveau fichier dans un fichier XML existant


Sujet :

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

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Ajouter des nouveaux élements depuis un nouveau fichier dans un fichier XML existant
    J'ai toujours le problème d'ajouter des nouveaux éléments dans un fichier existant. Ces nouveaux élements seront récupérés depuis un autre fichier XML. Les nouveaux éléments peuvent être différents par rapport aux éléments du fichier déjà existant. Par exemple-->
    fichier existant:
    <rdf>
    <goal>
    <name>xx<\name>
    <specialization rdf:resource http:\\.xyz...owl\>
    <\goal>
    <\rdf>

    nouveau fichier à parser vient de http:\\.xyz...owl :
    <rdf>
    <process>
    <name>xx<\name>
    <generalization rdf:resource http:\\.abc...owl\>
    <\process>
    <\rdf>

    En gros, la racine <rdf> est toujours pareil pour tous les fichiers mais le rest est différent....donc ma méthodologie est que
    1) je commence par parser le fichier existant et récupère la ressource pour pouvoir parser la deuxième en vérifiant si (attributeName == rdf:resource)
    2) j'utilise méthode appendChild pour créer les nouveaux éléments comme ca:
    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
     
    DOMParser parser2 = new DOMParser();
    parser2.parse(valueAttribute);
    // value Attribute = http://...xyz..owl. --> récupère depuis le fichier existant
    Document doc = parser2.getDocument();
    Element rdf2 = doc.getDocumentElement();
    NodeList file2 = rdf2.getElementsByTagName("*");
     
    for (int k = 0; k < file2.getLength(); k++) {
     
    Element process = (Element) file2.item(k);
    //document = le fichier existant.
    document.createElement(process.getNodeName());
    process.appendChild(document.createTextNode(IndexDOM.findText((Element) file2.item(k))));
    ((Element) file2.item(0)).appendChild(process);
    rdf.appendChild((Element) file2.item(0));
    et j'obtiens le message erreur comme ça:

    rdf:ID ="ENT-10150"Exception in thread "main" org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
    at org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown Source)
    at org.apache.xerces.dom.ParentNode.insertBefore(Unknown Source)
    at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source)
    at bodyclass.RetreiveElementsMakingChainTestAttribute.main(RetreiveElementsMakingChainTestAttribute.java:89)

    la ligne 89 est --> process.appendChild(document.createTextNode(IndexDOM.findText((Element) file2.item(k))));

    SVP, merci de me conseiller comment corriger cet erreur

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    oui apparemment il n'encaisse pas que ton node appartiennent à deux representations en memoires differentes. Une solution pourrait simplement consister à utiliser la methode cloneNode(true) (true pour le clonage recursif) afin de ne pas manipuler le meme node mais un node qui est "equals"

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    j'ai essayé ajouter "clonenode(true)"....mais il marche toujours pas....j'ai reçu le même erreur. peut-être j'ai pas bien l'ajouté.
    Tu peux préciser un peu "où" je dois ajouter cette méthode. Moi je fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Element process = (Element) file2.item(k);
    //document = le fichier existant.
    document.createElement(process.getNodeName());
    process.appendChild(document.createTextNode(IndexDOM.findText((Element) file2.item(k)))).clonenode(true);
    ((Element) file2.item(0)).appendChild(process);
    rdf.appendChild((Element) file2.item(0));
    PS. je suis très débutante de codage...

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/07/2014, 14h14
  2. liste chainnéé qui veut pa ajouter des nouveaux element
    Par naoufal_bago dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 14/03/2008, 15h16
  3. Réponses: 7
    Dernier message: 15/05/2007, 12h05
  4. Ajouter des nouveaux package à mon projet
    Par mikky dans le forum JBuilder
    Réponses: 3
    Dernier message: 31/03/2005, 07h54

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