Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2008, 22h38   #1
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
Par défaut [DOM] écrire entete dans fichier xml avec PHP5 (modif le 11/06 à 8H20)

Bonjour a tous,

j'ai un petit soucis : je souhaite ajouter au fichier XML que je crée dynamiquement avec PHP5, mon entête avec le lien vers le xsd, le xsl...

j'arrive à a obtenir cela :
Citation:
<?xml version="1.0" encoding="utf-8"?>
<VOLS xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd">

a lieu de ca que j'aimerai :
Citation:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="aero.xsl" type="text/xsl"?>
<VOLS xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd">


merci beaucoup

EDIT : j'ai reformulé le problème.
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 21h29   #2
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
il faut juste bien fermeé tes tags !
en xml toute les balises doivent être fermé.

pour corrigé ton exemple fait ça:
Citation:
$doc=new DOMDocument();
$link='<?xml-stylesheet href="aero.xsl" type="text/xsl"?>';
$link.='<VOLS xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd" />';
$doc->loadHTML($link);
$xmlDate_gen=$doc->createElement("DATE_GEN", date("d.m.y"));
$doc->appendChild($xmlDate_gen);
cf barre rouge oblique
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 21h32   #3
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
arf merci je viens de trouver.

du coup autre problème : dans mon link je crée un élément VOLS qui englobe toues les données mais le problème c'est qu'il faut que je le referme tout a la fin.

j'ai testé ca :

Citation:
$doc->loadXML("</VOLS>");
mais il me dit :
Citation:
Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: StartTag: invalid element name in Entity, line: 1 in C:\Program Files\EasyPHP 2.0b1\www\Site AERO V2\xml_crea.php on line 65

Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: Extra content at the end of the document in Entity, line: 1 in C:\Program Files\EasyPHP 2.0b1\www\Site AERO V2\xml_crea.php on line 65
de plus j'ai une page de verif duu XML avec DOm et quand je met le slash il me foire la validation et quand je le met pas il est OK
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 21h53   #4
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
moi perso j'utiliserais que tu dom et pas des bpetit bout de chaîne que tu charge

par exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
$docxml = new DOMDocument('1.0', 'iso-8859-1');
 
//créer un noead racine
$nodeVol = $dom->createElement('VOL');
$nodeVol->setAttribute("xmlns:si", "http://www.w3.org/2001/XMLSchema-instance");
$nodeVol->setAttribute("xsi:noNamespaceSchemaLocation", "XML/aero.xsd");
$docxml->appendChild($nodeVol)
 
//ajouter un noeud dans le noeud racine (VOL)
$xmlDate_gen=$doc->createElement("DATE_GEN", date("d.m.y"));
$nodeVol->appendChild($xmlDate_gen);
 
 
echo $docxml->saveXML();
?>
je sais pas avec quoi tu vérifie ton xml,mais essaye de l'ouvrir avec un navigateur quelconque ou ajoute ton en haut de ton script la fonction php suivante:
Code :
header('Content-type: text/xml');
pour indiquer au navigateur que c'est du xml qu'il est censé recevoir. Du coup s'il est mal formé, il te le diras tout de suite.
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 22h14   #5
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
bon j'ai ca du coup :
Citation:
$doc=new DOMDocument('1.0', 'iso-8859-1');
$nodeVol = $dom->createElement('VOLS');
$nodeVol->setAttribute("xmlns:si", "http://www.w3.org/2001/XMLSchema-instance");
$nodeVol->setAttribute("xsi:noNamespaceSchemaLocation", "XML/aero.xsd");
$doc->appendChild($nodeVol);

$xmlDate_gen=$doc->createElement("DATE_GEN", date("Y-m-d"));
$doc->appendChild($xmlDate_gen);
mais du coup j'ai ca :
Citation:
<?xml version="1.0" encoding="iso-8859-1"?>
<VOLS xmlns:si="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd"/>
alors que je voudrais ca :
Citation:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="aero.xsl" type="text/xsl"?>
<VOLS xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd">

et mon VOLS ne se termine toujours pas a la fin...

P.S : ma validation est primordiale dans sur une page spéciale, pas le choix ^^


Quand je fais mon fichier à la main ca fonctionne parfaitement, le prob c'est en automatique...

d'ou l'entete comme cela et le </VOLS> a la fin
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 22h31   #6
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
la strucure complète que tu veux c'est ça :
Citation:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="aero.xsl" type="text/xsl"?>
<VOLS ...>
<DATE_GEN>09.06.08</DATE_GEN>
</VOLS>
et juste pour rappel dans le xml toute les balise doivent être fermé ou auto fermé, mais aussi elles doivent être toutes contenu dans une balise racine.

Si je comprends bien ton problème ta balise racine est VOLS.
Dans ce cas fais comme celà:
Code :
1
2
3
4
5
6
7
8
$doc=new DOMDocument('1.0', 'iso-8859-1');
$nodeVol = $doc->createElement('VOLS');
$nodeVol->setAttribute("xmlns:si", "http://www.w3.org/2001/XMLSchema-instance");
$nodeVol->setAttribute("xsi:noNamespaceSchemaLocation", "XML/aero.xsd");
$racine = $doc->appendChild($nodeVol);
 
$xmlDate_gen=$doc->createElement("DATE_GEN", date("Y-m-d"));
$racine->appendChild($xmlDate_gen);
j'avoue mon exemple était un peu voireux :p
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 22h42   #7
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
voila la structure c'est ça exactement par contre je vois pas c'est quoi la variable $dom

pis me faut le lien xsl aussi
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 07h12   #8
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
c'est une faute de ma part. j'edite et je corrige
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 08h07   #9
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
merci beaucoup pour le coup de main
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 13h19   #10
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
bin tu m'as pas mis la solution ^^
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 13h56   #11
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
mais si j'ai modifier mon post de 22h31 pour corrigé ma faute; et j'ai remplacé le dom par doc.
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 17h51   #12
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
oui mais ca règle pas mon problème du lien xsl et du </vols> à la fin du fichier...
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 17h54   #13
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
as tu fais un
Citation:
echo $doc->saveXML();
et tu verras la sortis XML qui en résulte.

le résultat du script vas te donnée ça :
Code :
1
2
3
 
<?xml version="1.0" encoding="iso-8859-1"?>
<VOLS xmlns:si="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd"><DATE_GEN>2008-06-10</DATE_GEN></VOLS>
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 18h08   #14
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
ok vais tester ça mais l'entête que je voudrai c'est ça :

Citation:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="aero.xsl" type="text/xsl"?>
<VOLS xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XML/aero.xsd">
et $racine c'est $doc en fait? parce que ma balise racine c'est VOLS qui contient tous mes <VOL>
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 18h21   #15
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
Bon c'est bon ca marche

il me reste donc que le problème de l'entête
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 18h35   #16
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
tu peux aussi ajouter
Code :
$doc->formatOutput = true;
pour avoir du code lisible

après pour ajouter ton stylesheet xsl je sais pas trop comment faire,
mais je sais que c'est pas forcément recommandé de laisser le navigateur web faire la transformation => car bien entendue ça dépend du navigateur.

Si tu veux toujours avoir le même rendu, je te conseille de faire ta transformation en php comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Initialisation de la resource xml
 
if ( ! ($dom = DOMDocument::loadXML($xml )) ) 
 die('Document xml invalid'); 
// Initialisation de la resource xslt 
 
if ( !($xslt = DOMDocument::loadXML($xsl)) ) 
die('Feuille xslt invalid');
 
// Initialisation du processeur de transformation 
$proc = new XSLTProcessor(); 
$proc->importStyleSheet($xslt);
// Exécution de la transformation
echo $proc->transformToXML($dom);
là c'est php qui fait la transformation et c mieux.
du coup tu n'a pas besoin de mettre dans ton flux xml le noeud suivant :
Citation:
<?xml-stylesheet href="aero.xsl" type="text/xsl"?>
il est remplacé par ta variable $xsl
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 18h54   #17
Invité de passage
 
Inscription : juin 2008
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 24
Points : 2
Points : 2
oula ca correspond a quoi les variables $xml, $xsl, $xslt?????
devil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h15.


 
 
 
 
Partenaires

Hébergement Web