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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  probleme XML avec PHP DOMXML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme XML avec PHP DOMXML

n°1098204
freed102
Arayashiki
Posté le 26-05-2005 à 15:11:16  profilanswer
 

mon programme génère une page xml visiblement erronnée... pourquoi ?
 
http://www.clonecopy.net/php/ezdocs/essai.xml
 
quelqu'un connait l'extension DOMXML de PHP ?
j'arrive pas à imbriquer mes balises correctement... elles se forment toutes sous la forme  
<balise1 attribut="123"/>
<balise2 attribut="123"/>
 
 au lieu de  
 
<balise1 attribut="123">
</balise>
<balise2 attribut="123">
</balise>
 
resultat... le DOM inspector de firefox les voit toutes imbriquées les unes dans les autres :
 
document
    |____balise1
            |____balise2
 
au lieu de  
 
document
    |___balise1
    |___balise2
 
comment je peux faire ?
       

mood
Publicité
Posté le 26-05-2005 à 15:11:16  profilanswer
 

n°1098226
bob la loo​se
Posté le 26-05-2005 à 15:24:04  profilanswer
 

autant que je sache, tes 2 ecritures sont equivalentes.
 
pour les voir imbriquees selon le premier schema, ca veut dire que ton document est comme ca:
 
<balise1 attribut="123">
    <balise2 attribut="123">
    </balise>
</balise>
 
ca veut dire aussi qu'il comprend de maniere implicite l'ordre des end-tags, puisque tu precise pas le numero.
 
a part ca, je vois pas ou est le probleme, desole!

n°1098233
freed102
Arayashiki
Posté le 26-05-2005 à 15:26:49  profilanswer
 

bah le probleme c'est que je veux pas que mes balises soient imbriquées comme ça :
<document>
<balise1 attribut="123">texte1  
    <balise2 attribut="123">texte2
    </balise2>  
</balise1>  
</document>
 
 
je veux qu'elles soient comme ça :
<document>
<balise1 attribut="123">texte1</balise1>  
<balise2 attribut="123">texte2</balise2>
</document>


Message édité par freed102 le 26-05-2005 à 15:28:25
n°1098250
bob la loo​se
Posté le 26-05-2005 à 15:39:36  profilanswer
 

bah oui, on est d'accord.
 
c'est pour toi ou c'est pour un projet?
 
tu peux pas passer a php5? paske il gere le xml les doigt dans le zen...
 
je connais pas domxml, j'utilise que php5.
 
t'as pas une fonction equivalente a appendChild (rattacher fils en francais)?

n°1098261
freed102
Arayashiki
Posté le 26-05-2005 à 15:44:05  profilanswer
 

non mon serveur est en PHP4, l'herbergeur a bien voulu installer l'extension DOMXML c deja bien ! lol
 
à priori j'ai toutes les fonctions necessaires pour construire mon fichier.. Mais peut etre que je m'y prends mal... Voici un bout de code :
 

Code :
  1. function CreateDOMTextElement($DOMdocument,$parentNodeName,$newNodename,$couleur,$size,$text)
  2. {
  3. $node=$DOMdocument->get_elements_by_tagname($parentNodeName);
  4. $newNode=$DOMdocument->create_element($newNodename);
  5. $childnode=$DOMdocument->append_child($newNode);
  6. $childnode->set_attribute("couleur",$couleur);
  7. $childnode->set_attribute("size",$size);
  8. $childnode=$DOMdocument->append_child($DOMdocument->create_text_node($text));
  9. }
  10. $dom=domxml_new_doc("1.0" );
  11. $firstchildName="document";
  12. $firstchild = $dom->create_element($firstchildName);
  13. $document = $dom->append_child($firstchild);
  14. $document->set_attribute("pagewidth","210" );
  15. $document->set_attribute("pageheight","297" );
  16. $document->set_attribute("background","#FFFFFF" );
  17. CreateDOMTextElement($dom,$firstchildName,"nom","#CCCCCC","12",$_SESSION['CVnom']);
  18. CreateDOMTextElement($dom,$firstchildName,"prenom","#CCCCCC","12",$_SESSION['CVprenom']);
  19. CreateDOMTextElement($dom,$firstchildName,"titre","#CCCCCC","12",$_SESSION['CVtitre']);
  20. CreateDOMTextElement($dom,$firstchildName,"adresse","#CCCCCC","16",$_SESSION['CVadresse']);
  21. CreateDOMTextElement($dom,$firstchildName,"cp","#CCCCCC","8",$_SESSION['CVcp']);
  22. CreateDOMTextElement($dom,$firstchildName,"ville","#CCCCCC","8",$_SESSION['CVville']);
  23. CreateDOMTextElement($dom,$firstchildName,"telephone","#CCCCCC","8",$_SESSION['CVtelephone']);
  24. CreateDOMTextElement($dom,$firstchildName,"fax","#CCCCCC","8",$_SESSION['CVfax']);
  25. CreateDOMTextElement($dom,$firstchildName,"mobile","#CCCCCC","8",$_SESSION['CVmobile']);
  26. CreateDOMTextElement($dom,$firstchildName,"email","#CCCCCC","8",$_SESSION['CVemail']);
  27. CreateDOMTextElement($dom,$firstchildName,"url","#CCCCCC","16",$_SESSION['CVurl']);
  28. //echo $dom->dump_mem(true, 'UTF-8' );
  29. $dom->dump_file('essai.xml');
  30. echo 'Export XML effectue !<br><a href="essai.xml">Voir le fichier</a>';

n°1098269
freed102
Arayashiki
Posté le 26-05-2005 à 15:52:38  profilanswer
 

en resumé...
j'ai créé une premiere balise "document" (firstchildName)
avec ma fonction "CreateDOMTextElement" j'ajoute mes elements un par un avec DOM->append_child(); au noeud (dont le nom est le second attribut de la fonction CreateDOMTextElement)  
 
... logiquement ça fait bien un  
 
<document>
<balise1>texte</balise1>
<balise2>texte</balise2>
<balise3>texte</balise3>
</document>
 
... mais c pas le cas !:(

n°1098284
FlorentG
Posté le 26-05-2005 à 16:04:07  profilanswer
 

Pour un truc comme ça :

<document>
<balise1>texte</balise1>
<balise2>texte</balise2>
<balise3>texte</balise3>
</document>


Faut faire comme ça :

$xml_doc =& domxml_new_doc('1.0');
 
$root =& $xml_doc->create_element('document');
$xml_doc->append_child($root);
 
$balise1 =& $xml_doc->create_element('balise1');
$balise1->set_content('texte');
$root->append_child($balise1);
 
$balise2 =& $xml_doc->create_element('balise2');
$balise2->set_content('texte');
$root->append_child($balise2);
 
$balise3 =& $xml_doc->create_element('balise3');
$balise3->set_content('texte');
$root->append_child($balise3);
 
echo $xml_doc->dump_mem();

n°1098308
freed102
Arayashiki
Posté le 26-05-2005 à 16:22:47  profilanswer
 

ah !! ya du mieux !!  
 

Code :
  1. function CreateDOMTextElement($DOMdocument,$parentNodeName,$newNodename,$couleur,$size,$text)
  2. {
  3. $parentNode=& $DOMdocument->get_elements_by_tagname($parentNodeName);
  4. $newNode=& $DOMdocument->create_element($newNodename);
  5. $newNode->set_content($text);
  6. $newNode->set_attribute("couleur",$couleur);
  7. $newNode->set_attribute("size",$size);
  8. $parentNode=& $DOMdocument->append_child($newNode);
  9. }


 
mais à quoi sert le & ???
 
et avec set_content je peux refermer ma baliser </DOCUMENT> ?


Message édité par freed102 le 26-05-2005 à 16:27:17
n°1098325
FlorentG
Posté le 26-05-2005 à 16:33:09  profilanswer
 

Y'a pas de balise document à refermer, tout ça est gérer par le create_element. Et le set_content revient à créer un textnode et à l'appender à un élément.
 
Pour le &, documente-toi sur PHP et les référence ;)

n°1098332
freed102
Arayashiki
Posté le 26-05-2005 à 16:40:13  profilanswer
 

bon j'ai toujours une erreur mais là je crois que c un probleme d'encodage ou je ne sais quoi...  
 

Citation :


La page XML ne peut pas être affichée  
Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.  
 
 
--------------------------------------------------------------------------------
 
Un seul élément de niveau supérieur est autorisé dans un document XML. Erreur de traitement de la ressource http://www.clon...
 
<nom couleur="#CCCCCC" size="12">Dupond</nom>
-^


mood
Publicité
Posté le 26-05-2005 à 16:40:13  profilanswer
 

n°1098346
FlorentG
Posté le 26-05-2005 à 16:49:45  profilanswer
 

La structure d'un doc XML doit avoir cette tronche :

<pouet>
  <truc>
  <bidule>
    <machin />
  </bidule>
</pouet>


Donc tout dans un seul élément. T'as pas le droit d'avoir genre :

<pouet>
  <truc />
</pouet>
<bidule>
  <machin>
  </machin>
</bidule>

n°1098349
freed102
Arayashiki
Posté le 26-05-2005 à 16:51:20  profilanswer
 

oui c bien ce que j'ai compris.. c ma balise <document> qui n'est pas fermée qui fait iech !!! lol

n°1098359
freed102
Arayashiki
Posté le 26-05-2005 à 16:55:47  profilanswer
 

à mon avis c mon get_element_by_tag_name qui gene
il me retourne un array alors que je veux un object

n°1098361
FlorentG
Posté le 26-05-2005 à 16:56:32  profilanswer
 

:heink: avec des fonctions DOMXML, c'est fait automatiquement, ça... Oublie pas de faire un append_child de ton élément document sur le document xml

n°1098365
freed102
Arayashiki
Posté le 26-05-2005 à 16:58:50  profilanswer
 

bah c ce que je fais....

Code :
  1. function CreateDOMTextElement($DOMdocument,$parentNodeName,$newNodename,$couleur,$size,$text)
  2. {
  3. $parentNode=$DOMdocument->get_elements_by_tagname($parentNodeName);
  4. $newNode=& $DOMdocument->create_element($newNodename);
  5. $newNode->set_attribute("couleur",$couleur);
  6. $newNode->set_attribute("size",$size);
  7. $newNode->set_content(htmlentities($text,ENT_QUOTES));
  8. $parentNode->append_child($newNode); //ligne 197
  9. }


 

Citation :


 
Fatal error: Call to a member function on a non-object in /u/clonecop/public_html/php/ezdocs/valid.php on line 197

n°1098375
FlorentG
Posté le 26-05-2005 à 17:02:41  profilanswer
 

Sauf que get_elements_by_tagname renvoi un tableau d'éléments, donc c'est :

$parentNode[0]->append_child($newNode);

n°1098380
freed102
Arayashiki
Posté le 26-05-2005 à 17:05:40  profilanswer
 

yess c ça...  
mais c toujours erroné pour le doc !
 

Code :
  1. <?xml version="1.0"?>
  2. <document pagewidth="210" pageheight="297" background="#FFFFFF"/>
  3. <nom couleur="#CCCCCC" size="12">Dupond</nom>
  4. <prenom couleur="#CCCCCC" size="12">Jacques</prenom>
  5. <titre couleur="#CCCCCC" size="12">Plombier</titre>
  6. <adresse couleur="#CCCCCC" size="16">33, rue des beaux tuyaux</adresse>
  7. <cp couleur="#CCCCCC" size="8">78400</cp>
  8. <ville couleur="#CCCCCC" size="8">Plombcity</ville>
  9. <telephone couleur="#CCCCCC" size="8">0123456790</telephone>
  10. <fax couleur="#CCCCCC" size="8">0123456710</fax>
  11. <mobile couleur="#CCCCCC" size="8"></mobile>
  12. <email couleur="#CCCCCC" size="8">xxx@xxx.com</email>
  13. <url couleur="#CCCCCC" size="16">http://www.clonecopy.net</url>

n°1098385
FlorentG
Posté le 26-05-2005 à 17:11:03  profilanswer
 

Là ça veut dire que les autres éléments ne sont pas ajoutés dans document (document est vide dans ton cas, cf. /> ), faut chercher ailleurs...

n°1098418
freed102
Arayashiki
Posté le 26-05-2005 à 17:27:14  profilanswer
 

question....
peut on passer un objet dans les attributs d'une fonction ??

n°1098434
FlorentG
Posté le 26-05-2005 à 17:33:43  profilanswer
 

Ben ouais

n°1098456
freed102
Arayashiki
Posté le 26-05-2005 à 17:41:23  profilanswer
 

oh tiens !! d'un coup ça marche !!!! je sais pas pourquoi j'ai rien changé ! WERK !!!!! :bounce: :bounce: :jap: :jap: :jap:
 
http://www.clonecopy.net/php/ezdocs/essai.xml
 

Code :
  1. function CreateDOMTextElement($DOMdocument,$parentNodeName,$newNodename,$couleur,$size,$text)
  2. {
  3. $parentNode=& $DOMdocument->get_elements_by_tagname($parentNodeName);
  4. $newNode=& $DOMdocument->create_element($newNodename);
  5. $newNode->set_attribute("couleur",$couleur);
  6. $newNode->set_attribute("size",$size);
  7. $newNode->set_content(htmlentities($text,ENT_QUOTES));
  8. $parentNode[0]->append_child($newNode);
  9. }
  10. $dom=& domxml_new_doc("1.0" );
  11. $firstchildName="document";
  12. $firstchild =& $dom->create_element($firstchildName);
  13. $firstchild->set_attribute("pagewidth","210" );
  14. $firstchild->set_attribute("pageheight","297" );
  15. $firstchild->set_attribute("background","#FFFFFF" );
  16. $dom->append_child($firstchild);
  17. CreateDOMTextElement($dom,$firstchildName,"nom","#CCCCCC","12",$_SESSION['CVnom']);
  18. CreateDOMTextElement($dom,$firstchildName,"prenom","#CCCCCC","12",$_SESSION['CVprenom']);
  19. CreateDOMTextElement($dom,$firstchildName,"titre","#CCCCCC","12",$_SESSION['CVtitre']);
  20. CreateDOMTextElement($dom,$firstchildName,"adresse","#CCCCCC","16",$_SESSION['CVadresse']);
  21. CreateDOMTextElement($dom,$firstchildName,"cp","#CCCCCC","8",$_SESSION['CVcp']);
  22. CreateDOMTextElement($dom,$firstchildName,"ville","#CCCCCC","8",$_SESSION['CVville']);
  23. CreateDOMTextElement($dom,$firstchildName,"telephone","#CCCCCC","8",$_SESSION['CVtelephone']);
  24. CreateDOMTextElement($dom,$firstchildName,"fax","#CCCCCC","8",$_SESSION['CVfax']);
  25. CreateDOMTextElement($dom,$firstchildName,"mobile","#CCCCCC","8",$_SESSION['CVmobile']);
  26. CreateDOMTextElement($dom,$firstchildName,"email","#CCCCCC","8",$_SESSION['CVemail']);
  27. CreateDOMTextElement($dom,$firstchildName,"url","#CCCCCC","16",$_SESSION['CVurl']);
  28. echo $dom->dump_mem(true, 'UTF-8' );
  29. $dom->dump_file('essai.xml');
  30. echo 'Export XML effectue !<br><a href="essai.xml">Voir le fichier</a>';


Message édité par freed102 le 26-05-2005 à 17:43:37
n°1098468
freed102
Arayashiki
Posté le 26-05-2005 à 17:46:21  profilanswer
 

pratique les fonctions... j'avais pas envie de me taper toutes les lignes à la main ! (avec toutes les erreurs qui vont avec)
 
thanx a lot ! :jap:

n°1098938
FlorentG
Posté le 26-05-2005 à 23:53:06  profilanswer
 

Great. Maintenant tu peux passer au XSL pour transformer ça en autre chose [:johneh]

n°1098955
freed102
Arayashiki
Posté le 27-05-2005 à 00:13:01  profilanswer
 

bah pas pour cette fois car là ça servait juste pour memoriser les parametres et informations destinées à la construction d'un fichier PDF (avec EZPDF, j'ai deja fait une sorte de moteur... Mais là je m'emmelais les crayons avec les variables... c pourquoi j'ai fait un systeme avec XML)
... je pense pas qu'un XSL soit necessaire... à moins que ce soit vraiment magique et qu'on peut transformer un XML+XSL en PDF super top graphique etc etc... mais j'en doute !


Message édité par freed102 le 27-05-2005 à 00:14:15
n°1098958
FlorentG
Posté le 27-05-2005 à 00:19:02  profilanswer
 

Je crois qu'il y a un truc comme ça justement, je vais me renseigner :sol:

n°1098961
FlorentG
Posté le 27-05-2005 à 00:25:21  profilanswer
 

http://www.netmag.co.uk/tutorials/ [...] tionid=183
 
Avec XSL-FO... A voir maintenant si c'est faisable via PHP...

n°1098967
freed102
Arayashiki
Posté le 27-05-2005 à 00:38:15  profilanswer
 

interessant... Mais est-ce que c'est capable de positionner les elements de façon precise avec des parametres ?

n°1098968
freed102
Arayashiki
Posté le 27-05-2005 à 00:40:06  profilanswer
 

ouai je vois le genre... mais je sens la galere avec les polices etc etc coté serveur ! avec ezpdf j'avais trouvé une solution plutot sympa pour les polices

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  probleme XML avec PHP DOMXML

 

Sujets relatifs
Probleme d'affichage d'un CStringProblème d'ouverture de fichier txt avec include
Problème d'installation du module XML::PARSERProbleme de boucle et base de donnees
Raaah le SQL... Probleme de jointureprobleme avec sscanf ...
Probleme avec recuperation de Fichier ZIPProbleme sur les sessions PHP
Plus de sujets relatifs à : probleme XML avec PHP DOMXML


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