Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1091 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Probleme d'utilisation de DOM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme d'utilisation de DOM

n°1187212
bob la loo​se
Posté le 29-08-2005 à 16:40:04  profilanswer
 

Je cherche à regrouper les données de 2 documents xml en un seul.
 
il s'agit de documents office dont la structure est :
 
office:content
    |____ office:automatic-styles
    |____ office:body
 
vu que les 2 documents sont identiques en terme de structure, je me suis dit qu'il me suffisait de placer une variable sur le noeud pere de ce que je veux copier et de lancer une boucle foreach ($truc->childNodes as $node){ copier le noeud au meme endroit dans l'autre doc;}
 
voici le code que j'ai ecrit, ce qui semble poser probleme est la ligne avec les 3 etoiles devant:
 
     
    //creation de la variable correspondant au doc 1
    $content = new DomDocument();
    $content->load("intro_trans.xml" );
    $racine_content = $content->documentElement;
 
    //recherche de office:automatic-styles
    foreach ($racine_content->childNodes as $node){
      if ($node->tagName == "office:automatic-styles" ){
        $style = $content->documentElement;
        $style = $node;
      }
    }
 
    //recherche de office:body
    foreach ($racine_content->childNodes as $node){
      if ($node->tagName == "office:body" ){
        $corps = $content->documentElement;
        $corps = $node;
      }
    }
 
    //creation de la variable correspondant au doc 2
    $publis = new DomDocument();
    $publis->load("liste_publis.xml" );
    $racine_publis = $publis->documentElement;
 
    //recherche de office:automatic-styles
    foreach ($racine_publis->childNodes as $node){
      if ($node->tagName == "office:automatic-styles" ){
        $style_publis = $content->documentElement;
        $style_publis = $node;
      }
    }
 
    //copie des noeuds a la volee
***    foreach ($style_publis->childNodes as $node){
      $style->appendChild($node);
    }
 
    //recherche de office:body
    foreach ($racine_publis->childNodes as $node){
      if ($node->tagName == "office:body" ){
        $corps_publis = $content->documentElement;
        $corps_publis = $node;
      }
    }
 
    //copie des noeuds a la volee
    foreach ($corps_publis->childNodes as $node){
      $corps->appendChild($node);
    }
 
    $content->save('content.xml');
 
le message d'erreur est le suivant:
 
PHP Fatal error:  Uncaught exception 'DOMException' with message 'Wrong Document Error' in c:\\www\\creat-rapport.php:110\nStack trace:\n#0 c:\\www\\creat-rapport.php(110): DOMElement->appendChild(Object(DOMElement))\n#1 {main}\n  thrown in c:\\www\\creat-rapport.php on line 110
 
malheureusement, pour moi c'est inbitable. si quelqu'un a une idee, je lui en serai reconnaissant.

mood
Publicité
Posté le 29-08-2005 à 16:40:04  profilanswer
 

n°1187219
esox_ch
Posté le 29-08-2005 à 16:47:17  profilanswer
 

Mdr, PHP qui se met a balancer des erreur d'uncaught exception alors que sa gestion des exception est a un niveau plus que pitoyable ...  
 
En gros, regarde dans la doc de DOM ce qui peut generer une exception DOM et apres tu le fous dans un bloc :
 
try{
// mon truc qui peux envoyer une exception
}
catch(DOMException e)
{
// traitement de mon exception
}


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1187245
bob la loo​se
Posté le 29-08-2005 à 17:09:39  profilanswer
 

ok, merci.
 
jusqu'a maintenant je n'accrochais que des noeuds vides, est ce que ca pourrait etre le fait que le noeud en question est une arborescence complete? (un noeud quoi!)
 
c'est bien la premiere fois que j'ai ce genre de probleme pour un appendChild, et pourtant je n'ai jamais eu a gerer d'exceptions.
 
oui, desole mais en fait en relisant mieux mon log j'ai vu que j'avais pointe la mauvaise ligne.

n°1187291
esox_ch
Posté le 29-08-2005 à 17:46:00  profilanswer
 

Lis la doc


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1187558
bob la loo​se
Posté le 30-08-2005 à 09:50:58  profilanswer
 

ok, d'apres la doc, je ne peux pas utiliser un noeud dans un docment autre que celui qui l'a cree.
 
est ce qu'a votre avis, je peux utiliser la fonction saveXML() de domDocument pour sauvegarder une chaine de caractere que je recopie dans l'autre document? (dans la doc ils expliquent pas si je peux faire ce que je veux avec)
 
sinon est ce que l'un de vous connait un moyen de transferer une partie d'un document vers un autre?

n°1187581
esox_ch
Posté le 30-08-2005 à 10:22:40  profilanswer
 

Je l'ai fait ce matin meme ... mais en Java ... Mais si je me rappelle bien en PHP c'est a peu pres la meme chose :
 

Code :
  1. Element useCaseNew = getElement(); // Ici je prend l'element que je veux rajouter dans le 2ème doc
  2. Element finalrootElement = fileToWrite.getRootElement(); // Je prend le RootElement de fileToWrite  
  3. finalrootElement.addContent(useCaseNew);


 
En résumé c'est ça ... En php ça devrait ressembler assez à ça ... faut juste remplacer les point par des ->, enlever les typage des objets et rajouter les $ la ou il faut


Message édité par esox_ch le 30-08-2005 à 10:22:56

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1187609
bob la loo​se
Posté le 30-08-2005 à 10:41:52  profilanswer
 

A priori, si on part du principe que j'importe des noeuds du document 1 au document 2, ca donne:
 
//creation du noue de reception
$cible_doc1 = $doc1->createElement();
 
$cible_doc1 = $doc1->importNode($noeud_a_deplacer);
$noeud_pere_de_la_cible->appendChild($cible_doc1);
 
au cas ou ca peut servir a qqn d'autre.
 
merci a tous

n°1187613
esox_ch
Posté le 30-08-2005 à 10:42:47  profilanswer
 

Bein c'est a peu pres ce que je t'ai donner non?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1187616
bob la loo​se
Posté le 30-08-2005 à 10:45:50  profilanswer
 

oué, c'est la traduction littérale.  :)
 
je prétend pas l'avoir trouvé tout seul.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Probleme d'utilisation de DOM

 

Sujets relatifs
[XML et AS] Problème liée à onLoad...problème avec un regex
Problème d'espacement entre les tableaux en PHPxhtml 1.0 problème dès l'affichage d'une image
Problème de cadres avec NamoProblème pour récuperer les valeurs de mes LB crées dynamiquement
[RESOLU]Problème clips dynamiques et assignation...Probleme tout bete avec while ! (je suis nb)
[PHP] Problème de parserprobleme avec la fonction contains()
Plus de sujets relatifs à : Probleme d'utilisation de DOM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR