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

Bibliothèques et frameworks PHP Discussion :

[DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Par défaut [DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier
    bonjour à tous,


    je souhaiterais importer un noeud d'une page xml et l'inserer au sein d'un 2e fichier xml en utilisant la fonctionimporteNode et insertBefore. ca fait 2 jours que je tourne ne rond, je ne vois vraiment pas ou ca cloche, voila mon code:
    il s'agit d'un classe ou les données membres sont :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    //1er xml
    private $containedDocXml;
    private $containedXPath;
     
    //2e xml
    private $containerDocXml;
    private $containerXPath;
     
    private $identifier;
     
     
    //je cherche le noeud a exporter dans le 1er xml
    $exportedNode = $this->containedXPath->query("//imscp:manifest/imscp:organizations/imscp:organization");
     
    //j'importe le noeud du 1er xml dans le 2e xml
    $importedNode = $this->containerDocXml->importNode($exportedNode->item(0),true);
     
    //je cherche l'endroit ou le coller dans le 2e xml
    $insertBeforeThisNode = $this->containerXPath->query("//imscp:manifest/imscp:organizations/imscp:organization/imscp:item[@identifier='$identifier']");
     
    //la racine du 2e xml
    $racine = $this->containerDocXml->documentElement;
     
    //je l'insere avant ce noeud dans xml2
    $racine->insertBefore($importedNode,$insertBeforeThisNode->item(0));
    voila, j'ai un message d'erreur "'Not Found Error', qui m'aide pas vraiment.
    j'ai tout testé ,ts les parametres sont bons mais ca bloque au niveau du insertBefore, je pense qu'il y a un probleme au niveau du 2e parametre '$insertBeforeThisNode->item(0)' ...

    je suis vraiment bloqué et désespéré alors toutes aides sera la bienvenue
    merci d'avance à tous

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !

    pourrais-tu donner le message d'erreur en entier s'il te plaît ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Par défaut
    salut ,

    en fait j'ai fais une classe d'erreur
    echo 'Message: ' . $e->getMessage() . '<br />';
    echo 'Code: ' . $e->getCode() . '<br />';
    qui me renvoit:
    Message: Not Found Error
    Code: 8
    sinon si je capte pas l'erreur ,j'ai ca :
    Uncaught exception 'DOMException' with message 'Not Found Error' in C:\xxx\xxx\XmlAssembler.php ....
    en fait je pense vraiment que ca vient du 2e parametre de la fonction insertBefore car si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $racine->insertBefore($importedNode);
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $racine->insertBefore($importedNode,$insertBeforeThisNode->item(0));
    l'insertion se fait bien mais en fin du fichier xml comme si c'etait un appendChild.

    De plus si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $racine->insertBefore($importedNode,$racine->firstChild);
    la aussi ca marche bien il me le rajoute au debut

    je me pose la question si la query Xpath qui me donne $insertBeforeThisNode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //je cherche l'endroit ou le coller dans le 2e xml
    $insertBeforeThisNode = $this->containerXPath->query("//imscp:manifest/imscp:organizations/imscp:organization/imscp:item[@identifier='$identifier']");
    ne me donne pas en fait une copie et pas le noeud lui meme. car si j'affiche le resultat dans $insertBeforeThisNode, il y a bien le noeud que je recherche...

    j'espere que j'explique bien et que tu comprends ce que je veux dire.
    en tout cas merci du fond du coeur pour ton aide

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2011, 20h31
  2. [DOM] copie des noeuds d'un fichier xml dans un autre fichier xml
    Par chiraz86 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 10/04/2010, 12h48
  3. Réponses: 6
    Dernier message: 18/09/2009, 10h35
  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, 18h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 12h49

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