Probleme d'utilisation de DOM - PHP - Programmation
Marsh Posté le 29-08-2005 à 16:47:17
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
}
Marsh Posté le 29-08-2005 à 17:09:39
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.
Marsh Posté le 29-08-2005 à 17:46:00
Lis la doc
Marsh Posté le 30-08-2005 à 09:50:58
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?
Marsh Posté le 30-08-2005 à 10:22:40
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 :
|
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
Marsh Posté le 30-08-2005 à 10:41:52
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
Marsh Posté le 30-08-2005 à 10:42:47
Bein c'est a peu pres ce que je t'ai donner non?
Marsh Posté le 30-08-2005 à 10:45:50
oué, c'est la traduction littérale.
je prétend pas l'avoir trouvé tout seul.
Marsh Posté le 29-08-2005 à 16:40:04
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.