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

Langage PHP Discussion :

Ecrire un fichier XML en fonction de données reçues


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Ecrire un fichier XML en fonction de données reçues
    Bonjiour,

    J'ai un problème au travail que je n'arrive pas à démystifier.

    J'ai pour tâche de créer via une mince application web le lien entre deux parties utilisant des programmes distincts mais interagissant entre eux grâce à une fiche XML.

    Quasiment à la fin du projet, je bloque car je n'arrive pas à écrire dans le fichier XML.

    J'ai sûrement du faire une grossière erreur que je n'ai pas vu, je décide donc de poster la fonction qui pose problème et peut-être que quelqu'un m'illuminera sur la source de mon problème ...

    Comme il est prévu qu'une balise ne soit pas renseignée si elle n'a pas de contenu, les balises appartenant à une catégorie particulière sont indexées dans un tableau dynamique avant la création de la catégorie puis affiliées à celle-ci qui est crée si et seulement si une seule de ses balises ou plus est/sont remplie(s).

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    function generateXMLDocument(DOMDocument $xmlhdlr, Array $Xml_elements, Array $GivenData, $filename = "test.xml")
    {
       foreach($Xml_elements as $category => $Elements)
       {
          $bCreateCategory = false;
     
          $i = 0;
     
          $TagsToAppend = Array();                           // Déclaration d'un tableau qui contiendra les balises à ajouter
     
          foreach($Elements as $label => $Definition)
          {
             $name = $Definition[0];
     
             foreach($GivenData as $ref => $content)
             {
                if($ref == $name)
                {
                   $new_element  = $xmlhdlr->createElement($ref);
                   $new_textNode = $xmlhdlr->createTextNode($content);
     
                   $new_element->appendChild($new_textNode);
     
                   $TagsToAppend[ $i++ ] = $new_element;
                   $bCreateCategory = true;
                }
             }
     
          }
     
          $res = $xmlhdlr->getElementsByTagName($category);
     
          if($res->length < 1 && $bCreateCategory == true)      // Créer catégorie si elle n'existe pas
          {
             $new_category = $xmlhdlr->createElement($category);
     
             foreach($TagsToAppend as $new_tag)
                $new_category->appendChild($new_tag);
     
             $xmlhdlr->appendChild($new_category);
             var_dump($new_category);
             echo "<br/><br/>";
          }
       }
       $xmlhdlr->save($filename);
       echo "document saved ... <br/>";
    }

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    est ce que vous indiquez un chemin complet pour le nom de fichier ?

    si cela ne change rien, affichez le contenu des différentes variables tout le long de la fonction pour vérifier qu'elles contiennent bien ce que vous souhaitez

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Points : 35
    Points
    35
    Par défaut
    DOMDocument::save devrait retourner le nombre d'octets écrits. Vérifie la valeur de retour de celle-ci et si c'est un FALSE, c'est qu'il y a quelque chose qui cloche, probablement le chemin vers le fichier comme l'a indiqué mathieu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $written = $xmlhdlr->save($filename);
    if($written !== false)
        echo "document saved. wrote ", $written, " bytes...<br/>";
    else
        echo "failed to save document ...<br/>";

Discussions similaires

  1. Que choisir pour gérer les sauvegardes : fichiers XML ou base de données ?
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 14/06/2007, 12h58
  2. [MySQL] utilisé un fichier XML pour stocker des données ?
    Par italiasky dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2007, 12h04
  3. [PHP-JS] Ecrire un fichier xml avec un string XML
    Par bobic dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2006, 15h18
  4. [C#] Ecrire un fichier XML en plusieurs fois
    Par schizette dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/08/2006, 16h54
  5. Ecrire un fichier XML avec la méthode Dom
    Par aswat dans le forum Général Python
    Réponses: 2
    Dernier message: 20/05/2006, 20h41

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