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] écrire dans fichier xml avec PHP5


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    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 :
    <?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 :
    <?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.

  2. #2
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    il faut juste bien fermeé tes tags !
    en xml toute les balises doivent être fermé.

    pour corrigé ton exemple fait ça:
    $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

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    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 :

    $doc->loadXML("</VOLS>");
    mais il me dit :
    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

  4. #4
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    moi perso j'utiliserais que tu dom et pas des bpetit bout de chaîne que tu charge

    par exemple:
    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
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    bon j'ai ca du coup :
    $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 :
    <?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 :
    <?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

  6. #6
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    la strucure complète que tu veux c'est ça :
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    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

  8. #8
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    c'est une faute de ma part. j'edite et je corrige

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup pour le coup de main

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    bin tu m'as pas mis la solution ^^

  11. #11
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    mais si j'ai modifier mon post de 22h31 pour corrigé ma faute; et j'ai remplacé le dom par doc.

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    oui mais ca règle pas mon problème du lien xsl et du </vols> à la fin du fichier...

  13. #13
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    as tu fais un
    echo $doc->saveXML();
    et tu verras la sortis XML qui en résulte.

    le résultat du script vas te donnée ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    ok vais tester ça mais l'entête que je voudrai c'est ça :

    <?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>

  15. #15
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Bon c'est bon ca marche

    il me reste donc que le problème de l'entête

  16. #16
    Membre habitué Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Points : 155
    Points
    155
    Par défaut
    tu peux aussi ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    <?xml-stylesheet href="aero.xsl" type="text/xsl"?>
    il est remplacé par ta variable $xsl

  17. #17
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    oula ca correspond a quoi les variables $xml, $xsl, $xslt?????

Discussions similaires

  1. [DOM] générer un fichier Xml avec php5
    Par sanatou dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 10/06/2008, 16h45
  2. [DOM] création de fichier XML avec PHP
    Par fleuveblanc dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/12/2007, 18h36
  3. [DOM] création de fichier XML avec PHP
    Par cortex007 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 09/12/2007, 12h31
  4. [DOM] Ecrire dans mon XML avec du PHP
    Par PurpleDoll dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 15/10/2007, 15h06
  5. [DOM XML] Insertion données dans fichier XML avec PHP pour Flash ?
    Par ExSter dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 10/05/2006, 12h16

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