écrire dans un fichier xml avec php

Musashii -  
UzUrpateur Messages postés 5 Statut Membre -
bonjour,
je débute avec le xml et php et je me pose une question.
En fait grâce à simpleXML j'ai réussi à récupérer le XML contenu dans me fichier, et à naviguer dedans pour

récupérer les donnée dont j'ai besoin, mais je ne sais pas comment faire pour rajouter des donnée.
Concrètement, j'ai un fichier de ce type :

Code:
<categorie id="cat1">
<categorie id="sous_cat1">
<img id="img1"/>
</categorie>
</categorie>

Et je voudrai rajouter <img id="img2"/> à la suite de l'img1
Comment je pourrai faire ça ?

9 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Utilise domxml et xpath (ici sous PHP5)
    exemple
    johand@horus:~/src/php/php5$ cat test.php
    <?php
    $anXMLString='<?xml version="1.0" encoding="UTF-8"?>
    <categorie id="cat1">
    <categorie id="sous_cat1">
    <img id="img1"/>
    </categorie>
    </categorie>';
    
    $doc = new  domDocument();
    $doc->loadXML($anXMLString);
    $xpathdoc= new DOMXPath($doc);
    $nodes = $xpathdoc->query('//categorie[@id="sous_cat1"]');
    $anotherNode = $doc->createElement("img","");
    $anotherNode->setAttribute("id", "blahblah");
    $nodes->item(0)->appendChild($anotherNode);
    $res = $doc->saveXML();
    print($res);
    ?>
    

    Lire par exemple:
    http://php.easynet.be/manual/en/ref.dom.php
    http://php.easynet.be/manual/fr/ref.dom.php
    et le miroir qui te convient le mieux.
    Tu sauves le document dans un fichier avec
    $doc->save("le_nom_du_fichier.xml");

    Johan
    29
    1. Musashii
       
      merci pour cette réponse très rapide ^^
      ça m'a été d'une grande utilité, j'ai réussi à faire ce que je voulais ^^
      0
  2. fausto
     
    hello

    pas besoin de php5

    en php4 :

    [code]

    //*******************************************************************************************************
    //génération XML
    //*******************************************************************************************************

    $xml_upload = "dossier photos/";
    $xml_upload .= "$nom_photo";

    //*******************************************************************************************************

    $filename = 'chemin vers le fichier XML';

    $newContent = "\r\t<image path=\"".$xml_upload."\" />";
    $newContent .= "\r</gallery>";
    $content = file_get_contents($filename);
    $newContent = str_replace('</gallery>', $newContent, $content);

    $handle = fopen($filename, 'w');
    fwrite($handle, $newContent);
    fclose($handle);
    if (fwrite) {
    echo "<table width=\"58%\" border=\"0\" align=\"center\" class=\"bloc1\">";
    echo "<br>";
    echo "<tr>";
    echo "<br>";
    echo "<br>";
    echo "<td width=\"79%\" class=\"bloc1\"><pre><center>Diaporama mis à jour</center></pre></td>";
    echo "<br>";
    echo "</tr>";
    echo "<br>";
    echo "</table>";
    }

    //*******************************************************************************************************

    [/code]

    ++
    f
    6
    1. Cartman
       
      Merci
      0
      1. titi > Cartman
         
        Merci
        0
  3. Fraja
     
    très bon exemple qui me sort une belle épine. Bravo pour la clareté de l'exmple.
    1
  4. Zup
     
    J'ai un petit prob avec cet exemple
    Parse error: parse error, unexpected T_OBJECT_OPERATOR
    ca correspondrait a la ligne $nodes->item(0)->appendChild($anotherNode);
    A quoi cela pourrait il etre du, ma version de php est la 4.4.7 ? je dois obligatoirement avoir la 5 ?
    (xpath activé)
    merci !
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. biohazard-34
     
    Bonjour a tous,
    j'ai lut votre post et me suis dit que peut être vous pourriez m'aider.

    J'aimerai en fait tirer d'un fichier .txt (chaque ligne une url)
    un fichiers .xml avec une ossature de type :"xmlns="https://www.sitemaps.org/schemas/sitemap/0.9/"" ou autre.

    En esperant une reponse, merci de votre attention.
    1
  7. UzUrpateur Messages postés 5 Statut Membre 1
     
    Portion de code:
    // johand@horus:~/src/php/php5$ cat test.php
    <?php
    $anXMLString='<?xml version="1.0" encoding="UTF-8"?>
    <categorie id="cat1">
    <categorie id="sous_cat1">
    <img id="img1"/>
    </categorie>
    </categorie>';
    
    $doc = new  domDocument();
    $doc->loadXML($anXMLString);
    $xpathdoc= new DOMXPath($doc);
    $nodes = $xpathdoc->query('//categorie[@id="sous_cat1"]');
    $anotherNode = $doc->createElement("img","");
    $anotherNode->setAttribute("id", "blahblah");
    $nodes->item(0)->appendChild($anotherNode);
    $res = $doc->saveXML();
    print($res);
    ?>
    


    fonctionnel !
    1
  8. musashii
     
    je suis désolé je suis vraiment débutant et j'ai un autre problème
    en fait je voudrai faire une arborescence avec les niveaux de catégories et les images, mais je sais pas vraiment comment m'y prendre avec les fonction disponibles, il vaut mieux faire ça avec simpleXML ou bien domXML ?
    0
  9. fausto
     
    bonjour,

    je voudrais faire la même chose,
    mais j'ai la version 4.3.3 de Php sur mon serveur
    si quelqu'un a une idée
    merci d'avance
    f
    0
    1. jo
       
      installe php5 ;)
      0
    2. mvmm
       
      <?php ?>
      0