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

APIs XML Discussion :

[XML][DOM][VB] Le noeud à insérer provient d'un contexte de document différent


Sujet :

APIs XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 13
    Points
    13
    Par défaut [XML][DOM][VB] Le noeud à insérer provient d'un contexte de document différent
    Bonjour à tous,

    Je me permets de vous poser cette question concernant une exception qui va finir par me rendre fou. La voici : "Le noeud à insérer provient d'un contexte de document différent." 1 seule réponse de Google à ce problème et la personne dit l'avoir résolu en utilisant des XMLElement, qui chez moi posent problème aussi.

    Cette fonction toute basique copie un noeud d'un document XML A vers un document XML B vierge.

    La structure de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <root>
        <node1>
             <subNode1/>
             <subNode2/>
             <subNode3/>
        </node1>
        <node2/>
    </root>
    Et maintenant la fonction posant problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [...]
    Dim SourceDocument, CibleDocument As New XMLDocument()
    SourceRapport.Load(FileNameSource)
    CibleDocument.LoadXML("<?xml version=""1.0"" encoding=""UTF-8""?><root></root>")
    Dim node As XmlNode = SourceRapport.Item("root").Item("node1").CloneNode(True)
    CibleDocument.Item("root").AppendChild(node) 'Exception ici
    CibleDocument.Save(FileNameCible)
    Donc voilà, je suis un peu coincé car j'ai également essayé en utilisant InsertAfter, etc...

    Merci de votre aide,
    NS.

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    pour copier un noeud d'une instance de Document à une autre, il faut impérativement utiliser la méthode importNode().
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Merci de votre réponse rapide.

    Le fichier XML "source" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    	<node1>
    		<subNode1>Test1</subNode1>
    		<subNode2>Test2</subNode2>
    		<subNode3>Test3</subNode3>
    	</node1>
    	<node2>OK</node2>
    </root>
    La fonction modifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim SourceDocument, CibleDocument As New XmlDocument()
    SourceRapport.Load(FileNameSource)
    CibleDocument.LoadXml("<?xml version=""1.0"" encoding=""UTF-8""?><root></root>")
    CibleDocument.ImportNode(SourceRapport.Item("root").Item("node1"), True) ' Plus d'exception ici
    CibleDocument.Save(FileNameDestination)
    Et enfin le fichier XML de sortie :'(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    </root>
    Visiblement il a purement et simplement ignoré ma commande (sachant qu'il n'y a pas eu cette fois d'exception levée).

    ImportNode() est une méthode spécifique de la classe héritée XMLDocument, comment puis-je alors positionner mes noeuds à importer à un emplacement précis de ma structure de données ?

    Cordialement,
    NS

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par NiKKiLLeR
    ImportNode() est une méthode spécifique de la classe héritée XMLDocument, comment puis-je alors positionner mes noeuds à importer à un emplacement précis de ma structure de données ?
    importNode() ne fait qu'importer le noeud dans le contexte du document cible, il faut un appendChild() pour le positionner dans son arborescence. Ca donne un truc du genre (désolé pour les éventuelles erreurs de syntaxe, mon VB est rouillé depuis des années, mais le principe est là) :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim NoeudImporte As XmlNode
    ...
    Set NoeudImporte = CibleDocument.ImportNode(SourceRapport.Item("root").Item("node1"), True)
    CibleDocument.documentElement.appendChild(NoeudImporte)
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Impeccable... ca marche... Il fallait le savoir :p

    Un grand merci, et bonne continuation à vous !

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

Discussions similaires

  1. [XML DOM]Supprimer plusieurs noeud
    Par Shandler dans le forum APIs
    Réponses: 9
    Dernier message: 06/06/2007, 19h30
  2. [xml dom] importer un noeud
    Par oFlex dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/03/2007, 09h13
  3. [DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier
    Par iznogoud36 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/06/2006, 12h55
  4. [DOM] PHP5 et XML comment ajouter un noeud dans un noeud précis?
    Par titou250 dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 20/04/2006, 21h02
  5. Réponses: 2
    Dernier message: 05/06/2004, 11h56

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